获取Windows系统版本
来源:互联网 发布:淘宝如何好评截图 编辑:程序博客网 时间:2024/05/21 08:59
->GetVersionEx只适应于Win8及之前的系统
从Windows8.1之后,GetVersionEx这个API被微软明文给废弃了,也就是说从Windows8.1开始之后(包括Windows10),这个API常规情况下就是返回6.2了。
void GetWinOS(CString& strOsName){ OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if (GetVersionEx(&osvi)) { // 主版本号 osv.dwMajorVersion // 次版本号 osv.dwMinorVersion if (osvi.dwMajorVersion == 5L) { if (osvi.dwMinorVersion == 0L) strOsName = _T("Windows 2000"); else if (osvi.dwMinorVersion == 1L) strOsName = _T("Windows XP"); } else if (osvi.dwMajorVersion == 6L) { if (osvi.dwMinorVersion == 0L) strOsName = _T("Windows Vista"); else if (osvi.dwMinorVersion == 1L) strOsName = _T("Windows 7"); else if (osvi.dwMinorVersion == 2L) strOsName = _T("Windows 8 OR Later"); } }}
->VerifyVersionInfo 微软推荐使用
本质是拿指定的版本号和当前系统实际的版本号进行比较,比较繁琐,没有GetVersionEx用起来方便
// 是否和指定版本号相等BOOL IsWinVerEqualTo(DWORD dwMajorVersion, DWORD dwMinorVersion){ OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0; // 初始化系统版本信息数据结构 ZeroMemory(&osvi, sizeof(osvi)); osvi.dwOSVersionInfoSize = sizeof(osvi); osvi.dwMajorVersion = dwMajorVersion; osvi.dwMinorVersion = dwMinorVersion; // 初始化条件掩码 VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_EQUAL); return VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask);}// 是否大于指定版本号BOOL IsWinVerGreaterThan(DWORD dwMajorVersion, DWORD dwMinorVersion){ OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0; // 初始化系统版本信息数据结构 ZeroMemory(&osvi, sizeof(osvi)); osvi.dwOSVersionInfoSize = sizeof(osvi); osvi.dwMajorVersion = dwMajorVersion; osvi.dwMinorVersion = dwMinorVersion; // 初始化条件掩码 VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER); // 主板号判断 if (VerifyVersionInfo(&osvi, VER_MAJORVERSION, dwlConditionMask)) { return TRUE; } // 初始化条件掩码 VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER); // 次版本号判断 return VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask);}// 是否小于指定版本号BOOL IsWinVerLessThan(DWORD dwMajorVersion, DWORD dwMinorVersion){ OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0; // 初始化系统版本信息数据结构 ZeroMemory(&osvi, sizeof(osvi)); osvi.dwOSVersionInfoSize = sizeof(osvi); osvi.dwMajorVersion = dwMajorVersion; osvi.dwMinorVersion = dwMinorVersion; // 初始化条件掩码 VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_LESS); // 主板号判断 if (VerifyVersionInfo(&osvi, VER_MAJORVERSION, dwlConditionMask)) { return TRUE; } // 初始化条件掩码 VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_LESS); // 次版本号判断 return VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask);}// 系统版本判断void GetWinOS(CString& strOsName){ if (IsWinVerEqualTo(5, 1)) { strOsName = _T("Windows XP"); } else if(IsWinVerEqualTo(6, 0)) { strOsName = _T("Windows Vista"); } else if(IsWinVerEqualTo(6, 1)) { strOsName = _T("Windows 7"); } else if (IsWinVerEqualTo(6, 2)) { strOsName = _T("Windows 8"); } else if (IsWinVerEqualTo(6, 3)) { strOsName = _T("Windows 8.1"); } else if (IsWinVerEqualTo(10, 0)) { strOsName = _T("Windows 10"); } else { strOsName = _T("UNKNOMN"); }}
当然如果不更改manifest文件,Win8.1和Win10 返回的版本号还是6.2,只需在<application></application>
中添加各系统ID即可,如下所示
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <assemblyIdentity type="win32" name="Test.exe" version="1.0.0.0" processorArchitecture="X86" /> <description> my exe </description> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 10 --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Windows 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> </application> </compatibility></assembly>
->NetWkstaGetInfo 最好的方法
头文件: Lmwksta.h (include Lm.h)
LIB: Netapi32.lib
DLL: Netapi32.dll
void GetWinOS(CString& strOsName){ DWORD dwLevel = 100; LPWKSTA_INFO_100 pBuf = NULL; NET_API_STATUS nStatus; DWORD dwMajVer, dwMinVer; nStatus = NetWkstaGetInfo(NULL,dwLevel,(LPBYTE *)&pBuf); // // 如果调用成功,取得版本信息 // if (nStatus == NERR_Success) { dwMajVer = pBuf->wki100_ver_major; dwMinVer = pBuf->wki100_ver_minor; // 根据版本号得到系统名称 if (dwMajVer == 5L) { if (dwMinVer == 1L) strOsName = _T("Windows XP"); } else if (dwMajVer == 6L) { if (dwMinVer == 0L) strOsName = _T("Windows Vista"); else if (dwMinVer == 1L) strOsName = _T("Windows 7"); else if (dwMinVer == 2L) strOsName = _T("Windows 8"); else if (dwMinVer == 2L) strOsName = _T("Windows 8.1"); } else if (dwMajVer == 10L) { if (dwMinVer == 0L) strOsName = _T("Windows 10"); } } // // 否则,提示系统错误 // else { strOsName = _T("Windows UNKNOWN"); } // // 释放内存 // if (pBuf != NULL) NetApiBufferFree(pBuf);}
0 0
- 获取windows系统版本
- 获取Windows系统版本
- 获取windows系统版本信息
- 获取Windows系统版本信息
- Cpp获取Windows系统版本
- GetVersionEx 获取较新Windows系统版本
- 完整获取各种Windows系统版本
- GetVersionEx 获取较新Windows系统版本
- windows API获取系统版本信息
- 获取windows系统的版本名称
- 获取当前windows系统 及 版本
- 获取WINDOWS系统版本的方法。。
- C/C++获取Windows系统版本
- Windows Phone开发之获取屏幕分辨率 和 系统版本
- delphi获取windows系统版本信息,大全,准确
- delphi获取windows系统版本信息,大全,准确
- Windows API 函数GetVersionEx 获取系统版本出错
- Windows API 函数GetVersionEx 获取系统版本出错
- UIView添加点击事件
- Ambari-Metrics配置指南
- class类名命名规则
- Java中Synchronized的用法
- Spring中控制反转怎么配置的?比如Action类有个成员变量TestService testService,Action类就可以直接用TestServiceIMP中的方法了
- 获取Windows系统版本
- 【socket】深入浅出讲解:php的socket通信
- hoj1030-Labyrinth
- 移除所有子视图,无需循环只需要一句代码
- maven引入私服jar
- 认识双阶乘
- Scala笔记一
- 瀑布流 collectionView实现
- 单点登录SSO,统一认证oAuth名词解释