win32程序判断windows系统(是否为win7或是更高版本)
2015-10-20 23:58
731 查看
首先还是要介绍一个基本姿势。首先是结构体:OSVERSIONINFOEX
该结构体包括了操作系统版本信息。
语法如下:
这样,还是同样的原则,你不可能记住所有的参数,你只要知道这个结构体是干嘛的,以及几个重要的参数就可以了:
可以看到 XP的:
dwMajorVersion = 5;
dwMinorVersion = 1;
wServicePackMajor = 2;
wServicePackMinor = 0;
而这个结构体主要是用于 GetVersionEx 和 VerifyVersionInfo 函数。
那就看看VerifyVersionInfo函数:
使用VerifyVersionInfo来进行版本判断,这个API声明在winbase.h里面,从Windows2000系统就已经开始提供了,但是我们可能很少使用,说实话,使用起来不是特别方便。我们先看看是怎么使用的,它本质是进行版本比较。
BOOL WINAPI VerifyVersionInfo(
In LPOSVERSIONINFOEX lpVersionInfo,
In DWORD dwTypeMask,
In DWORDLONG dwlConditionMask
);
第一个参数是熟悉的OSVERSIONINFOEX,但是这里是做为传入参数使用;
第二个参数dwTypeMask用于指定要比较哪些项,可以比较主版本,次版本,Build号等等,可以使用位组合。
第三个参数则是比较的方法,是>、=还是<,或者>=,<=等等,可以通过VER_SET_CONDITION来设置,可以进行各种组合来判断,还是比较灵活的。
那么VER_SET_CONDITION又是什么呢?其实就是一个宏定义而已。
最后上一个win32的代码,来判断本机是不是win7或是更高的版本!!!
该结构体包括了操作系统版本信息。
Contains operating system version information. The information includes major and minor version numbers, a build number, a platform identifier, and information about product suites and the latest Service Pack installed on the system.
语法如下:
typedef struct { DWORD dwOSVersionInfoSize; //在使用GetVersionEx之前要将此初始化 //为结构的大小 DWORD dwMajorVersion; //系统主版本号 DWORD dwMinorVersion; //系统次版本号 DWORD dwBuildNumber; //系统构建号 DWORD dwPlatformId; //系统支持的平台(详见附1) TCHAR szCSDVersion[128]; //系统补丁包的名称 WORD wServicePackMajor; //系统补丁包的主版本 WORD wServicePackMinor; //系统补丁包的次版本 WORD wSuiteMask; //标识系统上的程序组(详见附2) BYTE wProductType; //标识系统类型(详见附3) BYTE wReserved; //保留,未使用 } OSVERSIONINFOEX, *POSVERSIONINFOEX;OSVERSIONINFOEX,
这样,还是同样的原则,你不可能记住所有的参数,你只要知道这个结构体是干嘛的,以及几个重要的参数就可以了:
可以看到 XP的:
dwMajorVersion = 5;
dwMinorVersion = 1;
wServicePackMajor = 2;
wServicePackMinor = 0;
而这个结构体主要是用于 GetVersionEx 和 VerifyVersionInfo 函数。
那就看看VerifyVersionInfo函数:
使用VerifyVersionInfo来进行版本判断,这个API声明在winbase.h里面,从Windows2000系统就已经开始提供了,但是我们可能很少使用,说实话,使用起来不是特别方便。我们先看看是怎么使用的,它本质是进行版本比较。
BOOL WINAPI VerifyVersionInfo(
In LPOSVERSIONINFOEX lpVersionInfo,
In DWORD dwTypeMask,
In DWORDLONG dwlConditionMask
);
第一个参数是熟悉的OSVERSIONINFOEX,但是这里是做为传入参数使用;
第二个参数dwTypeMask用于指定要比较哪些项,可以比较主版本,次版本,Build号等等,可以使用位组合。
第三个参数则是比较的方法,是>、=还是<,或者>=,<=等等,可以通过VER_SET_CONDITION来设置,可以进行各种组合来判断,还是比较灵活的。
那么VER_SET_CONDITION又是什么呢?其实就是一个宏定义而已。
ULONGLONG VER_SET_CONDITION( ULONGLONG dwlConditionMask, DWORD dwTypeBitMask, BYTE dwConditionMask );
最后上一个win32的代码,来判断本机是不是win7或是更高的版本!!!
#include <windows.h> #include <stdio.h> BOOL Is_WinXP_SP2_or_Later() { OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0; int op = VER_GREATER_EQUAL; // Initialize the OSVERSIONINFOEX structure. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osvi.dwMajorVersion = 5; osvi.dwMinorVersion = 1; osvi.wServicePackMajor = 2; osvi.wServicePackMinor = 0; // Initialize the condition mask. VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, op); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, op); VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, op); VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMINOR, op); // Perform the test. return VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, dwlConditionMask); } int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if (Is_WinXP_SP2_or_Later()) ::MessageBox(NULL, ("The system meets the requirements"), NULL, NULL); else ::MessageBox(NULL, ("The system does not meet the requirements"), NULL, NULL); }
相关文章推荐
- shell 学习笔记 (二)
- D3D自学笔记(山峰与水波)
- [深入理解Java虚拟机]第六章 无关性的基石
- leetcode 2 Add Two Numbers
- 交换两个数内容,不含变量(改)
- u3d_Shader_effects笔记3 half diffuse 和 ramp texture
- 体感设备:因特尔 Intel RealSense R200,乐视LeTV Pro Xtion和Orb奥比中光bec Astra比较
- windows 7 搭建openfire 服务器 图解
- AngularJS学习01--概念
- 爱与失落
- 关于cfile fopen fopen_s 在windows vista win7 win8 win 10系统盘目录创建文件失败解决方案-- fopen 创建文件失败
- 欢迎使用CSDN-markdown编辑器
- 48. PHP 页面静态化(1)
- 关于sizeof()函数
- listview中如何将某一个item显示成其它的样式
- 10月20日 html学习笔记(2)
- 浅谈贝贝游戏数据加密解密方式
- 好多的东西需要掌握!
- iOS开发整理
- python(3)methods & tips~