c++ 如何通过编程检测Windows 11?

1rhkuytd  于 2022-12-05  发布在  Windows
关注(0)|答案(1)|浏览(1087)

我想知道是否有任何API或方法来检测应用程序是否在Windows 11上运行。
虽然搜索,我发现这些apis,但它缺乏一个特定的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);
    }
jm81lzqq

jm81lzqq1#

Windows 11是Windows 10的扩展,因此它不会增加RtlGetVersion()和其他类似API报告的主/次版本号,也不会在应用程序清单中添加新的<supportedOS> GUID。
Windows 11仍然报告为v10.0,如OSVERSIONINFOEXW文档中所示:
下表总结了受支持的Windows版本返回的版本信息。使用“其他”列中的信息或内部版本号来区分具有相同版本号的操作系统。
| 作业系统|版本号|dwMajor版本|dwMinor版本|其他|
| - -|- -|- -|- -|- -|
| Windows 11操作系统|10.0版本|10个|第0页|w产品类型==版本_NT_工作站|
| Windows Server 2022操作系统|10.0版本|10个|第0页|w产品类型!=版本_NT_工作站|
| Windows Server 2019操作系统|10.0版本|10个|第0页|w产品类型!=版本_NT_工作站|
| Windows 10(所有版本)|10.0版本|10个|第0页|w产品类型==版本_NT_工作站|
因此,您需要使用内部版本号来区分Windows 10和11。Windows 11是v10.0内部版本21996及更高版本。

相关问题