一:获得版本GetVersionEx
BOOL WINAPI GetVersionEx( _Inout_ LPOSVERSIONINFO lpVersionInfo );
LpVersionInfo:这个参数执行这个结构体 OSVERSIONINFO or OSVERSIONINFOEX 这个结构体。
OSVERISIONINFOEX结构体是OSVERSIONINFO结构体的扩展,所以这个函数可以传递这两个参数的任意一个,前提条件式必须设置结构体的大小,让GetVersionEx知道你要传递的是哪个结构体。
#include<windows.h>
#include<tchar.h>
int _tmain()
{
OSVERSIONINFOEX infoEx;
ZeroMemory(&infoEx, sizeof(OSVERSIONINFOEX)); //初始化结构体,都设置为0
infoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);//设置结构体的大小
GetVersionEx((LPOSVERSIONINFO)&infoEx);
_tprintf(L"%d\t%d\t%d\t%d\t%d\t%d\n",
infoEx.dwMajorVersion,
infoEx.dwMinorVersion,
infoEx.dwBuildNumber,
infoEx.dwPlatformId,
infoEx.wServicePackMajor,
infoEx.wServicePackMinor
);
_gettchar();
return 0;
}
获得版本信息用处:首先判断一个程序是否满足OS版本,一般往下兼容
二:确认当前系统是否满足版本需求VerifyVersionInfo,其中lpVersionInfo是需要的系统版本
BOOL WINAPI VerifyVersionInfo( _In_ LPOSVERSIONINFOEX lpVersionInfo,//需要的系统版本
_In_ DWORD dwTypeMask, //测试项,也就是说,lpVersionInfo是需要的设置
_In_ DWORDLONG dwlConditionMask //比较条件
);
程序:
#include<windows.h> #include<tchar.h> int _tmain() { OSVERSIONINFOEX infoEx; ZeroMemory(&infoEx, sizeof(OSVERSIONINFOEX)); //初始化结构体,都设置为0 infoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);//设置结构体的大小 infoEx.dwMajorVersion = 99; //最高版本号 infoEx.dwMinorVersion = 0; //最低版本号 infoEx.wServicePackMajor = 0; infoEx.wServicePackMinor = 0; DWORDLONG dwlConditionMask=0; VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL); DWORD dwTypeMask = VER_MAJORVERSION | VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR; if (VerifyVersionInfo(&infoEx, dwTypeMask, dwlConditionMask)) //判断是否满足版本 { _tprintf(L"this system is sufficient!\n"); } else { _tprintf(L"this system is not ok!\n"); } _gettchar(); return 0; }
三:C4996错误解决方法
加入_CRT_SECURE_NO_WARNINGS