c++ - 如何检测我的软件是否在 Windows XP 上运行?

标签 c++ windows windows-xp detection

我运行了一些代码来检测 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/

相关文章:

c++ - 如何使二叉树的递归插入更有效(高效)?

c++ - C++ 中方法返回的编码约定

windows - 将 Win32 API WndProc Key 消息从一个窗口传输到另一个窗口

python - 如何在Python中获取退出代码?

c# - C# Windows 窗体的设计模式

c# - 控制谁可以使用XP中的音频输出 channel

c++ - 你能用英语尽可能简单地解释什么是复制构造函数以及我什么时候需要使用它吗

c++ - 如何帮助模板类型推断

windows-xp - 系统总内存消耗