判断OS版本的几个方法
2016-07-02 22:48
721 查看
Win8.1以前,可以利用微软提供的OSVERSIONEX这个结构体直接获取到系统所对应的版本号。
使用方法如下:
然后可以直接可以通过函数下面的函数来判断当前系统的版本,如下:
然而该方法不能直接获取到版本号,而且需要VS 要至少Win 8.1 SDK,判断Win10系统的话,至少要包含Win10 SDK。用起来也不怎么方便。
下面介绍两种方法可以直接获取到系统的版本号。
方法一 通过wmi可以直接读取OS 版本。
参考文章利用WMI获取本机基本信息: http://blog.csdn.net/cnuserfdg/article/details/51759694
通过下面的语句可以得到系统版本号。
优点:可以直接读取到各个版本号。
缺点:需要实现wmi读取,代码量大
方法二 通过读取核心DLL信息获取版本号
缺点:无法获取build version信息。
上面只是简单的介绍了获取系统版本的方法,Windows版本太多,想获取更为准确的版本信息,请参考MSDN.
使用方法如下:
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.
相关文章推荐
- 如何重装TCP/IP协议
- 使用OS Watcher监控操作系统
- Windows 8 官方高清壁纸欣赏与下载
- 谁是桌面王者?Win PK Linux三大镇山之宝
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- 什么是Mac OS X?跟Linux有什么区别
- Windows Clang开发环境备忘
- 从Windows系统下访问Linux分区相关软件
- 对《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》一文的商榷
- Windows下搭建本地SVN服务器
- 使用Windows原生命令一键清空剪贴板
- windows用windeployqt发布qt quick application程序
- 利用开源软件打造自己的全功能远程工具
- Windows 8虚拟机不能全屏的解决方法
- 虚拟化基础架构Windows 2008篇之1-虚拟化基础服务概述
- 虚拟化基础架构Windows 2008篇之5-安装Windows部署服务
- 虚拟化基础架构Windows 2008篇之7-添加其他操作系统的安装镜像
- 虚拟化基础架构Windows 2008篇之9-配置Windows部署服务