Cpp獲取Windows系統版本

參考 windows 下c++獲取操作系統版本名稱筆記
感謝原博主的分享

windows通過c++獲取操作系統主要分兩種:
1、windows是8.1版本以下版本:獲取操作系統可以通過windows提供的api中GetVersionEx函數來獲取
2、windows是8.1版本及以上:獲取操作系統主要通過RtlGetNtVersionNumbers法來獲取

//獲取8.1以下版本操作系統名稱
string GetSystemVersion()
{
	string strOSVersion = ("Unknown Microsoft Windows Version");

	OSVERSIONINFOEX os;
	os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
	if (!GetVersionEx((OSVERSIONINFO *)&os)) return(strOSVersion);

	switch (os.dwMajorVersion)
	{
	case 4:
		switch (os.dwMinorVersion)
		{
		case 0:
			if (os.dwPlatformId == VER_PLATFORM_WIN32_NT)
				strOSVersion = ("Microsoft Windows NT 4.0");
			else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
				strOSVersion = ("Microsoft Windows 95");
			break;
		case 10:
			strOSVersion = ("Microsoft Windows 98");
			break;
		case 90:
			strOSVersion = ("Microsoft Windows Me");
			break;
		}
		break;
	case 5:
		switch (os.dwMinorVersion)
		{
		case 0:
			strOSVersion = ("Microsoft Windows 2000");
			break;

		case 1:
			strOSVersion = ("Microsoft Windows XP");
			break;

		case 2:
		{
			SYSTEM_INFO info;
			GetSystemInfo(&info);
			if (os.wProductType == VER_NT_WORKSTATION
				&& info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
			{
				strOSVersion = ("Microsoft Windows XP Professional x64 Edition");
			}
			else if (GetSystemMetrics(SM_SERVERR2) == 0)
				strOSVersion = ("Microsoft Windows Server 2003");
			else if (GetSystemMetrics(SM_SERVERR2) != 0)
				strOSVersion = ("Microsoft Windows Server 2003 R2");
		}
			break;
		}
		break;

	case 6:
		switch (os.dwMinorVersion)
		{
		case 0:
			if (os.wProductType == VER_NT_WORKSTATION)
				strOSVersion = ("Microsoft Windows Vista");
			else
				strOSVersion = ("Microsoft Windows Server 2008");
			break;
		case 1:
			if (os.wProductType == VER_NT_WORKSTATION)
				strOSVersion = ("Microsoft Windows 7");
			else
				strOSVersion = ("Microsoft Windows Server 2008 R2");
			break;
		case 2:
			if (os.wProductType == VER_NT_WORKSTATION)
				strOSVersion = ("Microsoft Windows 8");
			else
				strOSVersion = ("Microsoft Windows Server 2012");
			break;
		}
		break;
	}
	return(strOSVersion);
}

//獲取8.1以上版本操作系統名稱
string GetSystemVersionNew()
{
	string strOSVersion = "";

	typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
	HINSTANCE hinst = LoadLibraryA("ntdll.dll");
	DWORD dwMajor, dwMinor, dwBuildNumber;
	NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");
	proc(&dwMajor, &dwMinor, &dwBuildNumber);
	if (dwMajor == 6 && dwMinor == 3)//win 8.1
	{
		if (dwBuildNumber == 4026541440)//WinServer2012R2的BuildNumber號
		{
			strOSVersion = "Microsoft Windows Server 2012 R2";
		}
		else
		{
			strOSVersion = "Microsoft Windows 8.1";
		}
	}
	else if (dwMajor == 10 && dwMinor == 0)//win 10
	{
		if (dwBuildNumber == 4026546233)//Win10的BuildNumber號
		{
			strOSVersion = "Microsoft Windows 10";
		}
		else
		{
			strOSVersion = "Microsoft Windows Server 2016";
		}
	}
	return(strOSVersion);
}

需要完整代碼請訪問CPlusPlusExamples

聯繫方式:


作者 鄭天佐
QQ 278969898
主頁 http://www.camelstudio.cn/
郵箱 [email protected]
博客 http://blog.csdn.net/zhengtianzuo06/
github https://github.com/zhengtianzuo
QQ羣 199672080

捐贈

覺得分享的內容還不錯, 就請作者喝杯咖啡吧~~

發佈了99 篇原創文章 · 獲贊 74 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章