參考 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
聯繫方式:
作者 | 鄭天佐 |
---|---|
278969898 | |
主頁 | http://www.camelstudio.cn/ |
郵箱 | [email protected] |
博客 | http://blog.csdn.net/zhengtianzuo06/ |
github | https://github.com/zhengtianzuo |
QQ羣 | 199672080 |
捐贈