我运行了一些代码来检测 Windows XP,我认为它应该可以工作,但是我应该用什么替换“??”来检测我是否在 Windows XP 上运行?
bool IsWindowsXP()
{
bool isWindowsXp = false;
OSVERSIONINFOEX osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( GetVersionEx((OSVERSIONINFO*)&osvi) )
{
const DWORD MinXpVersion = ??;
const DWORD MaxXpVersion = ??;
if ((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
(vi.dwMajorVersion >= MinXpVersion) &&
(vi.dwMajorVersion <= MinXpVersion))
{
isWindowsXp = false;
}
}
return isWindowsXp;
}
最佳答案
在 OSVERSIONINFOEX
的文档页面上结构,两个相关字段是这样说的:
For more information, see Remarks.
在备注部分下方有一个方便的表格:
Operating system Version number dwMajorVersion dwMinorVersion Other Windows 8 6.2 6 2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION Windows Server 2012 6.2 6 2 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION Windows 7 6.1 6 1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION Windows Server 2008 R2 6.1 6 1 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION Windows Server 2008 6 6 0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION Windows Vista 6 6 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION Windows Server 2003 R2 5.2 5 2 GetSystemMetrics(SM_SERVERR2) != 0 Windows Home Server 5.2 5 2 OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER Windows Server 2003 5.2 5 2 GetSystemMetrics(SM_SERVERR2) == 0 Windows XP Prof x64 Ed 5.2 5 2 (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) Windows XP 5.1 5 1 Not applicable Windows 2000 5 5 0 Not applicable
如表所示,XP 为 5.1。
关于c++ - 如何检测我的软件是否在 Windows XP 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253779/