我正在为特定于操作系统的应用程序制作应用程序,但我似乎无法缩小 Windows 10 的范围,它以 Windows 8 的形式出现。我在 Window 10 Pro 上对其进行了测试,结果是 Major: 6 Min:2。有没有另一种方法可以更有效地检查它是否是 Windows 10?
编辑:发现一个正常工作的 API RtlGetVersion() 适用于所有操作系统!
#include "windows.h"
#include <iostream>
using namespace std;
BOOL EqualsMajorVersion(DWORD majorVersion)
{
OSVERSIONINFOEX osVersionInfo;
::ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFOEX));
osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
osVersionInfo.dwMajorVersion = majorVersion;
ULONGLONG maskCondition = ::VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL);
return ::VerifyVersionInfo(&osVersionInfo, VER_MAJORVERSION, maskCondition);
}
BOOL EqualsMinorVersion(DWORD minorVersion)
{
OSVERSIONINFOEX osVersionInfo;
::ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFOEX));
osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
osVersionInfo.dwMinorVersion = minorVersion;
ULONGLONG maskCondition = ::VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL);
return ::VerifyVersionInfo(&osVersionInfo, VER_MINORVERSION, maskCondition);
}
int main()
{
if (EqualsMajorVersion(7) && EqualsMinorVersion(1))
printf("Maj:7 Min:1");
else if (EqualsMajorVersion(7) && EqualsMinorVersion(0))
printf("Maj:7 Min:0");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(7))
printf("Maj:6 Min:7");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(6))
printf("Maj:6 Min:6");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(5))
printf("Maj:6 Min:5");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(4))
printf("Maj:6 Min:4");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(3))
printf("Maj:6 Min:3");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(2))
printf("Maj:6 Min:2");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(1))
printf("Maj:6 Min:1");
else if (EqualsMajorVersion(6) && EqualsMinorVersion(0))
printf("Maj:6 Min:0");
else if (EqualsMajorVersion(5) && EqualsMinorVersion(2))
printf("Maj:5 Min:2");
else if (EqualsMajorVersion(5) && EqualsMinorVersion(1))
printf("Maj:5 Min:1");
else
printf("OS not on list...");
getchar();
}
原文由 user3732111 发布,翻译遵循 CC BY-SA 4.0 许可协议
这很讽刺,但是…
文档 在这里。
编辑:来自雷德蒙德的天才们似乎在思考原型时遇到了问题,或者换句话说,OP 得到了一个未定义的符号错误,如评论中所述。还有这个功能:
And, for Windows 10,
wMajorVersion
,wMinorVersion
, andwServicePackMajor
appear to be, respectively,10
,0
和0
。该功能的文档在 这里。
第二次编辑:这是官方的:
IsWindowsVersionOrGreater()
和GetVersionEx()
从 8.1 开始被破坏。 UseIsWindowsXXXOrGreater()
always instead, whereXXX
can beXP
,XPSP1
,XPSP2
,XPSP3
,Vista
,VistaSP1
,VistaSP2
,7
,7SP1
,8
,8Point1
,10
, 或Server
。