繁体   English   中英

如何以编程方式检测 Windows 11?

[英]How to detect Windows 11 programmatically?

我想知道是否有任何 API 或检测应用程序是否在 Windows 11 上运行的方法。

在搜索时我发现了这些api ,但它缺少 Windows 11 的特定信息,有一个IsWindowsXXOrGreater但我不确定要检查哪个版本以及如何使用它。

我也在 StackOverflow 上发现了一些类似的问题,但参考 Windows 10,我尝试了一些答案,但我仍然无法得到“结论性”的方法来检查它。

在 Windows 11 上测试时显示“10”:

    NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW);
    OSVERSIONINFOEXW osInfo;

    *(FARPROC*)&RtlGetVersion = GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");

    if (NULL != RtlGetVersion)
    {
        osInfo.dwOSVersionInfoSize = sizeof(osInfo);
        RtlGetVersion(&osInfo);
        qDebug() << "version: " << (double)osInfo.dwMajorVersion;

        MessageBoxA(NULL, std::to_string((double)osInfo.dwMajorVersion).c_str(), NULL, 0);
    }

Windows 11 是 Windows 10 的扩展,因此它不会增加RtlGetVersion()和其他类似 API 报告的主要/次要版本号,也不会在应用程序清单中添加新的<supportedOS> guid。

Windows 11 仍然报告为 v10.0,如OSVERSIONINFOEXW文档中所示:

下表总结了 Windows 的受支持版本返回的版本信息。使用“其他”列或内部版本号中的信息来区分具有相同版本号的操作系统。

操作系统 版本号 dw主要版本 dw次要版本 其他
Windows 11 10.0 10 0 wProductType == VER_NT_WORKSTATION
Windows 服务器 2022 10.0 10 0 wProductType != VER_NT_WORKSTATION
Windows 服务器 2019 10.0 10 0 wProductType != VER_NT_WORKSTATION
Windows 10(所有版本) 10.0 10 0 wProductType == VER_NT_WORKSTATION

因此,您需要使用内部版本号来区分 Windows 10 和 11。Windows 11 是 v10.0 内部版本 21996 及更高版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM