Win32判斷使用者作業系統的版本號以及位數
阿新 • • 發佈:2019-01-25
一:作業系統版本號:
至今為止從官方文件上查詢到的windows作業系統版本號的對照表為:
其中windows APi函式提供許多判斷作業系統的函式:
//Windows8以上的作業系統判斷不準確
DWORD WINAPI GetVersion (VOID);
BOOL WINAPI GetVersionExW(__inout LPOSVERSIONINFOW lpVersionInformation);
以上函式在windows8.1失效,不能用於判斷作業系統的平臺!
判斷使用者作業系統是否為windows10:
/* @brief 判斷使用者作業系統 @return true:windows10使用者 false:其他使用者 */ BOOL __isWindows10() { const DWORD windows10 = 10U;//標識為常量,便於閱讀 DWORD nativeMajor = 0, nativeMinor = 0, dwBuildNumber = 0; typedef void(__stdcall *NTPROC)(DWORD*, DWORD*, DWORD*); HINSTANCE hIns = LoadLibrary(L"ntdll.dll"); if (hIns == NULL) return false; NTPROC proc = (NTPROC)GetProcAddress(hIns, "RtlGetNtVersionNumbers"); proc(&nativeMajor, &nativeMinor, &dwBuildNumber); if (nativeMajor != windows10) return false; return true; }
還有一種判斷windows作業系統是否為windows10的windows API函式(不過在我的電腦上沒有驗證成功):
以下還有判斷作業系統的版本號:
VERSIONHELPERAPI IsWindows7OrGreater();//判斷是否為win7以上的系統 VERSIONHELPERAPI IsWindows7SP1OrGreater();//判斷是否為win7sp以上的系統 VERSIONHELPERAPI IsWindows8OrGreater();//判斷是否為win8以上的系統 VERSIONHELPERAPI IsWindowsServer();//判斷是否為windows伺服器 VERSIONHELPERAPI IsWindowsVistaOrGreater();//判斷是否為windows Vista以上的系統 VERSIONHELPERAPI IsWindowsXPOrGreater();//判斷是否為windows Xp以上的系統
二、windows作業系統的位數:
BOOL __isSystem64() { SYSTEM_INFO si; typedef void (WINAPI *LPFN_PGNSI)(LPSYSTEM_INFO); LPFN_PGNSI pGNSI = (LPFN_PGNSI)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetNativeSystemInfo"); pGNSI(&si); if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) { _tprintf(L"GetNativeSystemInfo get the system 64\n"); return true; } _tprintf(L"GetNativeSystemInfo get the system 32\n"); return false; }
上面的方法是通過系統自帶的kernel32.dll庫檔案裡面的GetNativeSystemInfo進行判斷作業系統的位數。