GetVersionEx函数
来源:互联网 发布:udid授权软件 编辑:程序博客网 时间:2024/06/05 14:35
0x01.GetVersionEx函数
0x01.原型
BOOL WINAPI GetVersionEx( _Inout_ LPOSVERSIONINFO lpVersionInfo);
0x02.参数
lpVersionInfo [in, out] An `OSVERSIONINFO` or `OSVERSIONINFOEX` structure that receives the operating system information. Before calling the `GetVersionEx` function, set the `dwOSVersionInfoSize` member of the structure as appropriate to indicate which data structure is being passed to this function.
0x03.返回值
If the function succeeds, the return value is a nonzero value.If the function fails, the return value is zero. To get extended error information, call GetLastError. The function fails if you specify an invalid value for the dwOSVersionInfoSize member of the OSVERSIONINFO or OSVERSIONINFOEX structure.
0x02.结构OSVERSIONINFOEX:
typedef struct { DWORD dwOSVersionInfoSize; //在使用GetVersionEx之前要将此初始化为结构的大小 DWORD dwMajorVersion; //系统主版本号 DWORD dwMinorVersion; //系统次版本号 DWORD dwBuildNumber; //系统构建号 DWORD dwPlatformId; //系统支持的平台 TCHAR szCSDVersion[128]; //系统补丁包的名称 WORD wServicePackMajor; //系统补丁包的主版本 WORD wServicePackMinor; //系统补丁包的次版本 WORD wSuiteMask; //标识系统上的程序组 BYTE wProductType; //标识系统类型 BYTE wReserved; //保留,未使用 } OSVERSIONINFOEX, *POSVERSIONINFOEX;
0x03.使用示例:
Requirements
例子
#include <windows.h>#include <stdio.h>void main(){ OSVERSIONINFO osvi; BOOL bIsWindowsXPorLater; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); bIsWindowsXPorLater = ( (osvi.dwMajorVersion > 5) || ( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) )); if(bIsWindowsXPorLater) printf("The system meets the requirements.\n"); else printf("The system does not meet the requirements.\n");}
下面是一个通过系统版本来判断操作系统名称的例子:
CString getSystemName() { SYSTEM_INFO info; //用SYSTEM_INFO结构判断64位AMD处理器 GetSystemInfo(&info); //调用GetSystemInfo函数填充结构 OSVERSIONINFOEX os; os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *)&os)) { CString vname; //下面根据版本信息判断操作系统名称 switch(os.dwMajorVersion){ //判断主版本号 case 4: switch(os.dwMinorVersion){ //判断次版本号 case 0: if(os.dwPlatformId==VER_PLATFORM_WIN32_NT) vname=_T("Microsoft Windows NT 4.0"); //1996年7月发布 else if(os.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS) vname=_T("Microsoft Windows 95"); break; case 10: vname=_T("Microsoft Windows 98"); break; case 90: vname=_T("Microsoft Windows Me"); break; } break; case 5: switch(os.dwMinorVersion){ //再比较dwMinorVersion的值 case 0: vname=_T("Microsoft Windows 2000"); //1999年12月发布 break; case 1: vname=_T("Microsoft Windows XP"); //2001年8月发布 break; case 2: if(os.wProductType==VER_NT_WORKSTATION && info.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) vname=_T("Microsoft Windows XP Professional x64 Edition"); else if(GetSystemMetrics(SM_SERVERR2)==0) vname=_T("Microsoft Windows Server 2003"); //2003年3月发布 else if(GetSystemMetrics(SM_SERVERR2)!=0) vname=_T("Microsoft Windows Server 2003 R2"); break; } break; case 6: switch(os.dwMinorVersion){ case 0: if(os.wProductType==VER_NT_WORKSTATION) vname=_T("Microsoft Windows Vista"); else vname=_T("Microsoft Windows Server 2008"); //服务器版本 break; case 1: if(os.wProductType==VER_NT_WORKSTATION) vname=_T("Microsoft Windows 7"); else vname=_T("Microsoft Windows Server 2008 R2"); break; case 2: vname=_T("Microsoft Windows 7"); break; } break; default: vname=_T("未知操作系统"); } return vname; } else return _T(""); }
以上只能判断操作系统的名称,那如何判断它是什么版本的呢(如Home版或Professional版)。下面这个函数就返回具体的版本名称:
CString getVersionMark() { OSVERSIONINFOEX os; os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *)&os)){ CString vmark; switch(os.dwMajorVersion){ //先判断操作系统版本 case 5: switch(os.dwMinorVersion){ case 0: //Windows 2000 if(os.wSuiteMask==VER_SUITE_ENTERPRISE) vmark=_T("Advanced Server"); break; case 1: //Windows XP if(os.wSuiteMask==VER_SUITE_EMBEDDEDNT) vmark=_T("Embedded"); else if(os.wSuiteMask==VER_SUITE_PERSONAL) vmark=_T("Home Edition"); else vmark=_T("Professional"); break; case 2: if(GetSystemMetrics(SM_SERVERR2)==0 && / os.wSuiteMask==VER_SUITE_BLADE) //Windows Server 2003 vmark=_T("Web Edition"); else if(GetSystemMetrics(SM_SERVERR2)==0 && os.wSuiteMask==VER_SUITE_COMPUTE_SERVER) vmark=_T("Compute Cluster Edition"); else if(GetSystemMetrics(SM_SERVERR2)==0 && os.wSuiteMask==VER_SUITE_STORAGE_SERVER) vmark=_T("Storage Server"); else if(GetSystemMetrics(SM_SERVERR2)==0 && os.wSuiteMask==VER_SUITE_DATACENTER) vmark=_T("Datacenter Edition"); else if(GetSystemMetrics(SM_SERVERR2)==0 && os.wSuiteMask==VER_SUITE_ENTERPRISE) vmark=_T("Enterprise Edition"); else if(GetSystemMetrics(SM_SERVERR2)!=0 && os.wSuiteMask==VER_SUITE_STORAGE_SERVER) vmark=_T("Storage Server"); break; } break; case 6: switch(os.dwMinorVersion){ case 0: if(os.wProductType!=VER_NT_WORKSTATION && os.wSuiteMask==VER_SUITE_DATACENTER) vmark=_T("Datacenter Server"); else if(os.wProductType!=VER_NT_WORKSTATION && os.wSuiteMask==VER_SUITE_ENTERPRISE) vmark=_T("Enterprise"); else if(os.wProductType==VER_NT_WORKSTATION && os.wSuiteMask==VER_SUITE_PERSONAL) //Windows Vista vmark=_T("Home"); break; } break; default: vmark=_T(""); } return vmark; } else return _T(""); }
1 0
- GetVersionEx函数
- GetVersionEx函数
- GetVersionEx函数
- GetVersion和GetVersionEx函数详解
- VC++ 获取操作系统的版本GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Windows API一日一练(73)GetVersionEx函数
- Java 之 final 关键字
- PAT乙级1036 跟奥巴马一起编程
- Python爬取网站信息出现Errno 10054
- Javascript中的深拷贝与浅拷贝
- 程序员发展之路
- GetVersionEx函数
- SQL 到 mongo的对应表
- boost::format常用用法
- fedora20 安装samba服务
- 100道动态规划——29 UVALive 5766 GRE Words AC自动机上的动态规划
- Linux-top命令使用总结
- stanford cs231n 课程学习
- HDU 1201 18岁生日
- 苹果手机自动默认长数字为手机号,调用拨号程序