我想知道是否有任何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);
}
1条答案
按热度按时间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及更高版本。