判断是否是64位系统,是返回TRUE不是返回FALSE:
//判断是否是64位系统
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandleA( "kernel32"), "IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
}
return bIsWow64;
}
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandleA( "kernel32"), "IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
}
return bIsWow64;
}
获取系统版本,OSVERSIONINFOEX结构体是用来存储系统信息的,可以用GetSystemMetrics函数获取系统信息,获取详细的版本可以参
wSuiteMask参数。 OSVERSIONINFOEX结构体原型:
typedef struct _OSVERSIONINFOEX {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[128];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wSuiteMask;
BYTE wProductType;
BYTE wReserved;
} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[128];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wSuiteMask;
BYTE wProductType;
BYTE wReserved;
} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;
此结构更详细参考MSDN。
主要Remarks参数判断系统版本,截图如下:
首先dwPlatformId==VER_PLATFORM_WIN32_NT判断是windows系统。
dwMajorVersion和GetSystemMetrics(SM_SERVERR2)判断版本。
struct OSbuild
{
CString Win7 ;
CString Server2008_R2;
CString Server2008;
CString winVista;
CString Server2003_R2;
CString Server2003;
CString WinXP;
CString Win2000;
CString Win98;
}OSbuild={L "Windows7",L "Windows Server 2008 R2",
L "Windows Server 2008",L "Windows Vista",
L "Windows Server 2003 R2",L "Windows Server 2003",
L "Windows XP", "Windows 2000",L "Window98或NT"},*pOS;
{
CString Win7 ;
CString Server2008_R2;
CString Server2008;
CString winVista;
CString Server2003_R2;
CString Server2003;
CString WinXP;
CString Win2000;
CString Win98;
}OSbuild={L "Windows7",L "Windows Server 2008 R2",
L "Windows Server 2008",L "Windows Vista",
L "Windows Server 2003 R2",L "Windows Server 2003",
L "Windows XP", "Windows 2000",L "Window98或NT"},*pOS;
//判断版本
LPCTSTR CWindOS::OSR2()
{
OSVERSIONINFOEX Os_WindVerInfoEx; // 版本信息
int inR2; // 版本信息
Os_WindVerInfoEx.dwOSVersionInfoSize= sizeof(OSVERSIONINFOEX);
GetVersionEx((OSVERSIONINFO *)&Os_WindVerInfoEx); // 注意转换类型
inR2=GetSystemMetrics(SM_SERVERR2);
pOS=&OSbuild;
CString pszOS;
if (Os_WindVerInfoEx.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
if (Os_WindVerInfoEx.dwMajorVersion <= 4 )
pszOS =pOS->Win98;
switch (Os_WindVerInfoEx.dwMajorVersion)
{
case 5:
if ( Os_WindVerInfoEx.dwMinorVersion == 0 )
pszOS =pOS->Win2000;
if ( Os_WindVerInfoEx.dwMinorVersion == 1 )
pszOS = pOS->WinXP;
if ((Os_WindVerInfoEx.dwMinorVersion == 2) && (inR2==0) )
pszOS=pOS->Server2003;
if ( (Os_WindVerInfoEx.dwMinorVersion == 2) && (inR2!=0) )
pszOS=pOS->Server2003_R2;
break;
case 6:
if ((Os_WindVerInfoEx.dwMinorVersion == 0)&&( Os_WindVerInfoEx.wProductType==VER_NT_WORKSTATION) )
pszOS=pOS->winVista;
if ( (Os_WindVerInfoEx.dwMinorVersion == 0)&&( Os_WindVerInfoEx.wProductType!=VER_NT_WORKSTATION) )
pszOS=pOS->Server2008;
if ((Os_WindVerInfoEx.dwMinorVersion ==1)&&( Os_WindVerInfoEx.wProductType==VER_NT_WORKSTATION) )
pszOS=pOS->Win7;
if ((Os_WindVerInfoEx.dwMinorVersion ==1)&&( Os_WindVerInfoEx.wProductType!=VER_NT_WORKSTATION) )
pszOS=pOS->Server2008_R2;
break;
}
}
return pszOS;
}
LPCTSTR CWindOS::OSR2()
{
OSVERSIONINFOEX Os_WindVerInfoEx; // 版本信息
int inR2; // 版本信息
Os_WindVerInfoEx.dwOSVersionInfoSize= sizeof(OSVERSIONINFOEX);
GetVersionEx((OSVERSIONINFO *)&Os_WindVerInfoEx); // 注意转换类型
inR2=GetSystemMetrics(SM_SERVERR2);
pOS=&OSbuild;
CString pszOS;
if (Os_WindVerInfoEx.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
if (Os_WindVerInfoEx.dwMajorVersion <= 4 )
pszOS =pOS->Win98;
switch (Os_WindVerInfoEx.dwMajorVersion)
{
case 5:
if ( Os_WindVerInfoEx.dwMinorVersion == 0 )
pszOS =pOS->Win2000;
if ( Os_WindVerInfoEx.dwMinorVersion == 1 )
pszOS = pOS->WinXP;
if ((Os_WindVerInfoEx.dwMinorVersion == 2) && (inR2==0) )
pszOS=pOS->Server2003;
if ( (Os_WindVerInfoEx.dwMinorVersion == 2) && (inR2!=0) )
pszOS=pOS->Server2003_R2;
break;
case 6:
if ((Os_WindVerInfoEx.dwMinorVersion == 0)&&( Os_WindVerInfoEx.wProductType==VER_NT_WORKSTATION) )
pszOS=pOS->winVista;
if ( (Os_WindVerInfoEx.dwMinorVersion == 0)&&( Os_WindVerInfoEx.wProductType!=VER_NT_WORKSTATION) )
pszOS=pOS->Server2008;
if ((Os_WindVerInfoEx.dwMinorVersion ==1)&&( Os_WindVerInfoEx.wProductType==VER_NT_WORKSTATION) )
pszOS=pOS->Win7;
if ((Os_WindVerInfoEx.dwMinorVersion ==1)&&( Os_WindVerInfoEx.wProductType!=VER_NT_WORKSTATION) )
pszOS=pOS->Server2008_R2;
break;
}
}
return pszOS;
}
转载于:https://blog.51cto.com/y5023/897072