判断是否是64位系统,是返回TRUE不是返回FALSE:
 
InBlock.gif //判断是否是64位系统
InBlock.gifBOOL IsWow64()    
InBlock.gif{    
InBlock.gif  typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);    
InBlock.gif  LPFN_ISWOW64PROCESS fnIsWow64Process;    
InBlock.gif  BOOL bIsWow64 = FALSE;    
InBlock.gif  fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandleA( "kernel32"), "IsWow64Process");    
InBlock.gif   if (NULL != fnIsWow64Process)    
InBlock.gif  {    
InBlock.gif    fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
InBlock.gif  }    
InBlock.gif   return bIsWow64;    
InBlock.gif}
 
获取系统版本,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;
此结构更详细参考MSDN。
 
主要Remarks参数判断系统版本,截图如下:
首先dwPlatformId==VER_PLATFORM_WIN32_NT判断是windows系统。
dwMajorVersion和GetSystemMetrics(SM_SERVERR2)判断版本。
InBlock.gif struct    OSbuild
InBlock.gif{
InBlock.gif  CString Win7 ;
InBlock.gif  CString Server2008_R2;
InBlock.gif  CString Server2008;
InBlock.gif  CString winVista;
InBlock.gif  CString Server2003_R2;
InBlock.gif  CString  Server2003;
InBlock.gif  CString WinXP;
InBlock.gif  CString Win2000;
InBlock.gif  CString Win98;
InBlock.gif}OSbuild={L "Windows7",L "Windows Server 2008 R2",
InBlock.gif  L "Windows Server 2008",L "Windows Vista",
InBlock.gif  L "Windows Server 2003 R2",L "Windows Server 2003",
InBlock.gif  L "Windows XP", "Windows 2000",L "Window98或NT"},*pOS;
 
InBlock.gif //判断版本
InBlock.gifLPCTSTR CWindOS::OSR2()
InBlock.gif{
InBlock.gif  OSVERSIONINFOEX  Os_WindVerInfoEx;   // 版本信息
InBlock.gif   int inR2;   // 版本信息
InBlock.gif  Os_WindVerInfoEx.dwOSVersionInfoSize= sizeof(OSVERSIONINFOEX);
InBlock.gif  GetVersionEx((OSVERSIONINFO *)&Os_WindVerInfoEx); // 注意转换类型
InBlock.gif  inR2=GetSystemMetrics(SM_SERVERR2);
InBlock.gif  pOS=&OSbuild;
InBlock.gif  CString  pszOS;
InBlock.gif
InBlock.gif   if (Os_WindVerInfoEx.dwPlatformId==VER_PLATFORM_WIN32_NT)
InBlock.gif  {
InBlock.gif       if (Os_WindVerInfoEx.dwMajorVersion <= 4 )
InBlock.gif      pszOS =pOS->Win98;
InBlock.gif       switch (Os_WindVerInfoEx.dwMajorVersion)
InBlock.gif      {
InBlock.gif         case 5:
InBlock.gif           if ( Os_WindVerInfoEx.dwMinorVersion == 0 )
InBlock.gif            pszOS =pOS->Win2000;
InBlock.gif           if ( Os_WindVerInfoEx.dwMinorVersion == 1 )
InBlock.gif            pszOS = pOS->WinXP;
InBlock.gif           if ((Os_WindVerInfoEx.dwMinorVersion == 2) && (inR2==0) )
InBlock.gif            pszOS=pOS->Server2003;
InBlock.gif           if ( (Os_WindVerInfoEx.dwMinorVersion == 2) && (inR2!=0) )
InBlock.gif            pszOS=pOS->Server2003_R2;
InBlock.gif           break;
InBlock.gif         case 6:
InBlock.gif           if ((Os_WindVerInfoEx.dwMinorVersion == 0)&&( Os_WindVerInfoEx.wProductType==VER_NT_WORKSTATION) )
InBlock.gif            pszOS=pOS->winVista;        
InBlock.gif           if ( (Os_WindVerInfoEx.dwMinorVersion == 0)&&( Os_WindVerInfoEx.wProductType!=VER_NT_WORKSTATION) )
InBlock.gif            pszOS=pOS->Server2008;
InBlock.gif           if ((Os_WindVerInfoEx.dwMinorVersion ==1)&&( Os_WindVerInfoEx.wProductType==VER_NT_WORKSTATION) )
InBlock.gif            pszOS=pOS->Win7;
InBlock.gif           if ((Os_WindVerInfoEx.dwMinorVersion ==1)&&( Os_WindVerInfoEx.wProductType!=VER_NT_WORKSTATION) )
InBlock.gif          pszOS=pOS->Server2008_R2;
InBlock.gif           break;
InBlock.gif      }
InBlock.gif    }
InBlock.gif
InBlock.gif   return pszOS;
InBlock.gif}