我觉得你喜欢这样
BOOL SafeGetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo)
{
BOOL bRet = FALSE;
do
{
if (lpSystemInfo == NULL)
{
break;
}
typedef void(WINAPI *GetNativeSystemInfoProc) (LPSYSTEM_INFO lpSystemInfo);
GetNativeSystemInfoProc pFun = (GetNativeSystemInfoProc)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "GetNativeSystemInfo");
if (NULL != pFun)
{
pFun(lpSystemInfo);
}
else
{
GetSystemInfo(lpSystemInfo);
}
bRet = TRUE;
} while (FALSE);
return bRet;
}
BOOL GetOSDisplayString( LPTSTR pszOS)
{
GRS_USEPRINTF();
OSVERSIONINFOEX osvi = {sizeof(OSVERSIONINFOEX)};
SYSTEM_INFO si = {};
BOOL bOsVersionInfoEx;
DWORD dwType;
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
return FALSE;
}
//GetSystemInfo(&si);
if (SafeGetNativeSystemInfo(&si) == FALSE)
{
return FALSE;
}
if ( VER_PLATFORM_WIN32_NT == osvi.dwPlatformId && osvi.dwMajorVersion > 4 )
{
StringCchCopy(pszOS, BUFSIZE, _T("Microsoft "));
if ( osvi.dwMajorVersion == 6 )
{
if( 0 == osvi.dwMinorVersion )
{
if( osvi.wProductType == VER_NT_WORKSTATION )
{
StringCchCat(pszOS, BUFSIZE, _T("Windows Vista "));
}
else
{
StringCchCat(pszOS, BUFSIZE, _T("Windows Server 2008 " ));
}
}
else if( 1 == osvi.dwMinorVersion )
{
if( osvi.wProductType == VER_NT_WORKSTATION )
{
StringCchCat(pszOS, BUFSIZE, _T("Windows 7 "));
}
else
{
StringCchCat(pszOS, BUFSIZE, _T("Windows Unknown "));
}
}
else
{
StringCchCat(pszOS, BUFSIZE, _T("Windows Unknown "));
}
GetProductInfo( 6, 0, 0, 0, &dwType);
switch( dwType )
{
case PRODUCT_ULTIMATE:
StringCchCat(pszOS, BUFSIZE, _T("Ultimate Edition" ));
break;
case PRODUCT_HOME_PREMIUM:
StringCchCat(pszOS, BUFSIZE, _T("Home Premium Edition" ));
break;
case PRODUCT_HOME_BASIC:
StringCchCat(pszOS, BUFSIZE, _T("Home Basic Edition" ));
break;
case PRODUCT_ENTERPRISE:
StringCchCat(pszOS, BUFSIZE, _T("Enterprise Edition" ));
break;
case PRODUCT_BUSINESS:
StringCchCat(pszOS, BUFSIZE, _T("Business Edition" ));
break;
case PRODUCT_STARTER:
StringCchCat(pszOS, BUFSIZE, _T("Starter Edition" ));
break;
case PRODUCT_CLUSTER_SERVER:
StringCchCat(pszOS, BUFSIZE, _T("Cluster Server Edition" ));
break;
case PRODUCT_DATACENTER_SERVER:
StringCchCat(pszOS, BUFSIZE, _T("Datacenter Edition" ));
break;
case PRODUCT_DATACENTER_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, _T("Datacenter Edition (core installation)" ));
break;
case PRODUCT_ENTERPRISE_SERVER:
StringCchCat(pszOS, BUFSIZE, _T("Enterprise Edition" ));
break;
case PRODUCT_ENTERPRISE_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, _T("Enterprise Edition (core installation)" ));
break;
case PRODUCT_ENTERPRISE_SERVER_IA64:
StringCchCat(pszOS, BUFSIZE, _T("Enterprise Edition for Itanium-based Systems" ));
break;
case PRODUCT_SMALLBUSINESS_SERVER:
StringCchCat(pszOS, BUFSIZE, _T("Small Business Server" ));
break;
case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
StringCchCat(pszOS, BUFSIZE, _T("Small Business Server Premium Edition" ));
break;
case PRODUCT_STANDARD_SERVER:
StringCchCat(pszOS, BUFSIZE, _T("Standard Edition" ));
break;
case PRODUCT_STANDARD_SERVER_CORE:
StringCchCat(pszOS, BUFSIZE, _T("Standard Edition (core installation)" ));
break;
case PRODUCT_WEB_SERVER:
StringCchCat(pszOS, BUFSIZE, _T("Web Server Edition" ));
break;
}
if ( si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 )
{
StringCchCat(pszOS, BUFSIZE, _T( ", 64-bit" ));
}
else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
{
StringCchCat(pszOS, BUFSIZE, _T(", 64-bit"));
}
else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ALPHA64)
{
StringCchCat(pszOS, BUFSIZE, _T(", 64-bit"));
}
else if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL )
{
StringCchCat(pszOS, BUFSIZE, _T(", 32-bit"));
}
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
{
if( GetSystemMetrics(SM_SERVERR2) )
{
StringCchCat(pszOS, BUFSIZE, _T( "Windows Server 2003 R2, "));
}
else if ( osvi.wSuiteMask==VER_SUITE_STORAGE_SERVER )
{
StringCchCat(pszOS, BUFSIZE, _T( "Windows Storage Server 2003"));
}
else if( osvi.wProductType == VER_NT_WORKSTATION &&
si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
{
StringCchCat(pszOS, BUFSIZE, _T( "Windows XP Professional x64 Edition"));
}
else
{
StringCchCat(pszOS, BUFSIZE, _T("Windows Server 2003, "));
}
if ( osvi.wProductType != VER_NT_WORKSTATION )
{
if ( si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
{
StringCchCat(pszOS, BUFSIZE, _T( "Datacenter Edition for Itanium-based Systems" ));
}
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
{
StringCchCat(pszOS, BUFSIZE, _T( "Enterprise Edition for Itanium-based Systems" ));
}
}
else if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
{
StringCchCat(pszOS, BUFSIZE, _T( "Datacenter x64 Edition" ));
}
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
{
StringCchCat(pszOS, BUFSIZE, _T( "Enterprise x64 Edition" ));
}
else
{
StringCchCat(pszOS, BUFSIZE, _T( "Standard x64 Edition" ));
}
}
else
{
if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
{
StringCchCat(pszOS, BUFSIZE, _T( "Compute Cluster Edition" ));
}
else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
{
StringCchCat(pszOS, BUFSIZE, _T( "Datacenter Edition" ));
}
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
{
StringCchCat(pszOS, BUFSIZE, _T( "Enterprise Edition" ));
}
else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
{
StringCchCat(pszOS, BUFSIZE, _T( "Web Edition" ));
}
else
{
StringCchCat(pszOS, BUFSIZE, _T( "Standard Edition" ));
}
}
}
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
{
StringCchCat(pszOS, BUFSIZE, _T("Windows XP "));
if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
{
StringCchCat(pszOS, BUFSIZE, _T( "Home Edition" ));
}
else
{
StringCchCat(pszOS, BUFSIZE, _T( "Professional" ));
}
}
if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
{
StringCchCat(pszOS, BUFSIZE, _T("Windows 2000 "));
if ( osvi.wProductType == VER_NT_WORKSTATION )
{
StringCchCat(pszOS, BUFSIZE, _T( "Professional" ));
}
else
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
{
StringCchCat(pszOS, BUFSIZE, _T( "Datacenter Server" ));
}
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
{
StringCchCat(pszOS, BUFSIZE, _T( "Advanced Server" ));
}
else
{
StringCchCat(pszOS, BUFSIZE, _T( "Server" ));
}
}
}
// Include service pack (if any) and build number.
if( _tcslen(osvi.szCSDVersion) > 0 )
{
StringCchCat(pszOS, BUFSIZE, _T(" ") );
StringCchCat(pszOS, BUFSIZE, osvi.szCSDVersion);
}
TCHAR buf[80];
StringCchPrintf( buf, 80, _T(" (build %d)"), osvi.dwBuildNumber);
StringCchCat(pszOS, BUFSIZE, buf);
return TRUE;
}
else
{
GRS_PRINTF(_T( "This sample does not support this version of Windows.\n") );
return FALSE;
}
}