VC判断系统版本

判断是否是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;    
}
 
获取系统版本,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)判断版本。
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;
 
//判断版本
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;
}
 

你可能感兴趣的:(VC判断系统版本)