問題一: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.csdn.net/pjl1119/article/details/8556693
和MSDN相關API說明。
那么如何區分Win8.1和Win10?
使用如下未文檔化API:
RtlGetNtVersionNumbers。
參考:
http://blog.csdn.net/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.csdn.net/k1988/article/details/47614529
其中這篇文章分析了很多方法:
http://blog.csdn.net/magictong/article/details/40753519
