1. 程式人生 > >Win32判斷使用者作業系統的版本號以及位數

Win32判斷使用者作業系統的版本號以及位數

 一:作業系統版本號: 

至今為止從官方文件上查詢到的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進行判斷作業系統的位數。