我想你這個樣子,
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;
}
}
看到我的EDIT1 ...... – domiSchenk 2010-07-06 06:41:25
看起來像我不能使用GetNativeSystemInfo coze其沒有明確的可讀性。有沒有辦法從註冊表中讀取它? im不知道是否HKLM \ Sorftware \微軟\的Windows NT \ currentVersion \ BuildLabEx保存... – domiSchenk 2010-07-06 07:39:04
它是完全可讀的;看到我的更新。 – 2010-07-06 12:43:07