转自:https://www.cnblogs.com/predator-wang/p/4775510.html
问题一:Windows SDK 8.1版本中的VersionHelper.h文件当中没有IsWindows10ORGreater,所以当你用IsWindows8Point1ORGreater判断出版本信息是Windows8.1以上的版本后,你就无法区分它到底是Win8.1还是Win10.
问题二:使用GetVersionEx这个API配合结构体OSVERSIONINFOEX这个方法获取版本信息,那么Win8以上的系统不论是Win8.1还是Win10都会被判定为主版本号为6,次版本号为2(即Win8的版本号)。
参考:
http://blog.youkuaiyun.com/pjl1119/article/details/8556693
和MSDN相关API说明。
那么如何区分Win8.1和Win10?
使用如下未文档化API:
RtlGetNtVersionNumbers。
参考:
http://blog.youkuaiyun.com/magictong/article/details/40753519
使用方法如下:

int main()
{
HMODULE hm;
if (hm = LoadLibrary("ntdll.dll"))
{
DWORD i = 0, j = 0, p = 0;
typedef void (WINAPI *getver)(DWORD*, DWORD*, DWORD*);
getver gv;
gv = (getver)GetProcAddress(hm, "RtlGetNtVersionNumbers");
if (gv)
{
gv(&i, &j, &p);
printf("Major is %d\nMinor is %d\nOptional Build is %d\n", i, j, p);
}
FreeLibrary(hm);
}
system("pause");
return 0;
}

Windows7下返回结果:

Windows8.1下返回结果:

Windows10下返回结果:

这样我们即使不是用WindowsSDK10,也能区分开Win8.1和Win10了。
其他方法:
http://blog.youkuaiyun.com/k1988/article/details/47614529
其中这篇文章分析了很多方法:
http://blog.youkuaiyun.com/magictong/article/details/40753519
本文解决Windows SDK 8.1中无法区分Win8.1与Win10的问题,介绍了使用未文档化的API RtlGetNtVersionNumbers来准确判断操作系统版本的方法。
8009

被折叠的 条评论
为什么被折叠?



