C ++检查Windows 10是否 [英] C++ Check if Windows 10
问题描述
我正在针对特定于操作系统的应用程序进行开发,但我似乎无法缩小Windows 10的范围,它是Windows 8的版本.我已经在Window 10 Pro上对其进行了测试,结果为Major:6 Min:2.还有另一种方法可以更有效地检查Windows 10吗?
I am making an app to OS specific but I can't seem to narrow down Windows 10, it comes up as Windows 8. I have tested it on Window 10 Pro and the outcome is Major: 6 Min:2. Is there another way to check if it's windows 10 more efficiently?
发现一个正常工作的API RtlGetVersion()适用于所有操作系统!
Found a properly working API RtlGetVersion() works for all OS's properly!
#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();
}
推荐答案
这很具有讽刺意味,但是...
This is pretty ironic, but...
BOOL WINAPI IsWindows10OrGreater(void);
文档此处.
编辑:来自Redmond的天才似乎在考虑原型时遇到问题,换句话说,OP收到注释中所述的未定义符号错误.还有这个功能:
Edit: The geniuses from Redmond appear to have problems thinking with prototypes, or in other words, the OP gets an undefined symbol error as stated in the comments. There's also this function:
BOOL WINAPI IsWindowsVersionOrGreater(
WORD wMajorVersion,
WORD wMinorVersion,
WORD wServicePackMajor
);
并且,对于Windows 10,wMajorVersion
,wMinorVersion
和wServicePackMajor
分别看来是10
,0
和0
.
And, for Windows 10, wMajorVersion
, wMinorVersion
, and wServicePackMajor
appear to be, respectively, 10
, 0
, and 0
.
该功能的文档此处.
第二次修改:这是官方的消息:IsWindowsVersionOrGreater()
和GetVersionEx()
从8.1版开始就被破坏了.始终改用IsWindowsXXXOrGreater()
,其中XXX
可以是XP
,XPSP1
,XPSP2
,XPSP3
,Vista
,VistaSP1
,VistaSP2
,7
,7SP1
,8
,8Point1
,10
或Server
.
Second edit: It's official: IsWindowsVersionOrGreater()
and GetVersionEx()
are broken from 8.1 onwards. Use IsWindowsXXXOrGreater()
always instead, where XXX
can be XP
, XPSP1
, XPSP2
, XPSP3
, Vista
, VistaSP1
, VistaSP2
, 7
, 7SP1
, 8
, 8Point1
, 10
, or Server
.
这篇关于C ++检查Windows 10是否的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!