您的位置:首页 > 其它

判断OS版本的几个方法

2016-07-02 22:48 721 查看
Win8.1以前,可以利用微软提供的OSVERSIONEX这个结构体直接获取到系统所对应的版本号。

使用方法如下:

BOOL getOSVer()
{
OSVERSIONINFOEX osinfor;
ZeroMemory(&osinfor, sizeof(OSVERSIONINFOEX));

osinfor.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

if (!GetVersionEx((OSVERSIONINFO*)&osinfor))
{

return FALSE;
}

TCHAR osVersionBfuff[256] = { 0 };
if (osinfor.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
_tprintf(_T("Major ver:%d \r\n"), osinfor.dwMajorVersion);
_tprintf(_T("Minor ver:%d \r\n"), osinfor.dwMinorVersion);
_tprintf(_T("Build ver:%d \r\n"), osinfor.dwBuildNumber);
_tprintf(_T("PlatF ver:%d \r\n"), osinfor.dwPlatformId);
_tprintf(_T("CD ver: %s \r\n"), osinfor.szCSDVersion);
}

return TRUE;
}
然而后来微软废弃了GetversionEx(),提供了另一种更为简便的接口,可以更好的API接口,只需要头文件包含#include <VersionHelpers.h>

然后可以直接可以通过函数下面的函数来判断当前系统的版本,如下:

if (IsWindowsXPOrGreater())
{
_tprintf(_T("OS is XP or greater than XP!\r\n"));
}
if (IsWindowsVistaOrGreater())
{
_tprintf(_T("OS is Vista or greater than Vista \r\n"));
}

if (IsWindows7OrGreater())
{
_tprintf(_T("OS is win7 or greater than win7\r\n"));
}

if (IsWindows8OrGreater())
{
_tprintf(_T("OS is win8 or greater than win8 \r\n"));
}


然而该方法不能直接获取到版本号,而且需要VS 要至少Win 8.1 SDK,判断Win10系统的话,至少要包含Win10 SDK。用起来也不怎么方便。

下面介绍两种方法可以直接获取到系统的版本号。

方法一 通过wmi可以直接读取OS 版本。

参考文章利用WMI获取本机基本信息: http://blog.csdn.net/cnuserfdg/article/details/51759694

通过下面的语句可以得到系统版本号。

getDMIInformation(_T("Win32_OperatingSystem"), NULL, NULL, _T("Version"));
Win10机器读取信息实验信息:10.0.10586,即为MajorVer.MinVer.BuildVer

优点:可以直接读取到各个版本号。

缺点:需要实现wmi读取,代码量大

方法二 通过读取核心DLL信息获取版本号

#include <LM.h>

#pragma comment(lib,"netapi32.lib")


BOOL getOSVer()
{
WKSTA_INFO_100 *wkStaInfor = NULL;

NET_API_STATUS netStatus = NetWkstaGetInfo(NULL, 100, (LPBYTE*)&wkStaInfor);
if (netStatus == NERR_Success)
{
DWORD dwMajorVer = wkStaInfor->wki100_ver_major;
DWORD dwMinVer = wkStaInfor->wki100_ver_minor;
DWORD dwVersion = (DWORD)MAKELONG(dwMinVer, dwMajorVer);
netStatus = NetApiBufferFree(wkStaInfor);
}
return TRUE;
}
优点:可以读取到主版本号和副版本号,代码量小

缺点:无法获取build version信息。

上面只是简单的介绍了获取系统版本的方法,Windows版本太多,想获取更为准确的版本信息,请参考MSDN.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  wmi os win10 windows version