获取系统版本号

CString GetSysVersion()
{
CString vname ;

SYSTEM_INFO info;
GetSystemInfo(&info);
OSVERSIONINFOEX os;
os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

if (GetVersionEx((OSVERSIONINFO *)&os))
{
switch (os.dwMajorVersion)
{ //判断主版本号
case 4:
switch (os.dwMinorVersion)
{ //判断次版本号
case 0:
if (os.dwPlatformId == VER_PLATFORM_WIN32_NT)
vname = L"Windows NT 4.0";
else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
vname = L"Windows 95";
break;
case 10:
vname = L"Windows 98";
break;
case 90:
vname = L"Microsoft Windows Me";
break;
}
break;
case 5:
switch (os.dwMinorVersion)
{ //再比较dwMinorVersion的值
case 0:
vname = L"Windows 2000"; //1999年12月发布
break;
case 1:
vname = L"Windows XP"; //2001年8月发布
break;
case 2:
if (os.wProductType == VER_NT_WORKSTATION &&
info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
vname = L"Windows XP Professional x64 Edition";
else if (GetSystemMetrics(SM_SERVERR2) == 0)
vname = L"Windows Server 2003"; //2003年3月发布
else if (GetSystemMetrics(SM_SERVERR2) != 0)
vname = L"Windows Server 2003 R2";
break;
}
break;
case 6:
switch (os.dwMinorVersion)
{
case 0:
if (os.wProductType == VER_NT_WORKSTATION)
vname = L"Windows Vista";
else
vname = L"Windows Server 2008"; //服务器版本
break;
case 1:
if (os.wProductType == VER_NT_WORKSTATION)
vname = L"Windows 7";
else
vname = L"Windows Server 2008 R2";
break;
case 2:
if (os.wProductType == VER_NT_WORKSTATION)
vname = L"Windows 8";
else
vname = L"Windows Server 2012";
break;
}
break;
default:
vname = L"Error";
}
}

typedef void(__stdcall *NTPROC)(DWORD *, DWORD *, DWORD *);
HINSTANCE hinst = LoadLibrary(L"ntdll.dll");
DWORD dwMajor, dwMinor, dwBuildNumber;
NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");
proc(&dwMajor, &dwMinor, &dwBuildNumber);

if(dwMajor == 6 && dwMinor == 3) //Win 8.1
{
vname = L"Windows 8.1";
}
if(dwMajor == 10 && dwMinor == 0)
{
if (os.dwBuildNumber >= 22000)
{
vname = L"Windows 11";
}
else
{
vname = L"Windows 10";
}
}


SYSTEM_INFO info_a;
GetNativeSystemInfo(&info_a);
if(info_a.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || info_a.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
{
vname = vname + _T(" 64bit");
}
else
{
vname = vname + _T(" 32bit");
}

return vname;
}

posted @ 2022-04-25 16:48  搞事特工  阅读(144)  评论(0)    收藏  举报