获取系统版本-OSVERSIONINFOEX结构解析

现如今系统版本主要有:
WindowsNT
Windows2000
WindowsXP
Windows2003
WindowsVista
Windows7
Windows10等

获取系统版本就必须说说以下这个函数:
BOOL GetVersionEx(POSVERSIONINFOEX pVersionInformation);
这个函数要求我们在自己的应用程序中分配一个OSVERSIONINFOEX结构,并把此结构的地址传给GetVersionEx.

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;

参数解释:

dwOSVenfoalafoSize: 调用 GetVerionEx .,必须设为 sizeof(OSVERSIONINFO) 或者sizeof(OSVERSIONINFOEX)

dwMajorVersion: 主机系统的主版本号

dwMinorVersion: 主机系统的次版本号

dwBuildNumber: 当前系统的构建版本号

dwPlatformld: 标识当前系统支持的套件(suite).值可以是VER_PLATFORM_WIN32s(Win32s), VER_PLATFORM_WIN32_WINDOWS(WiBdows 95/Windows 98或 VER_PLATFORM_WIN32_NT(Windows NT/Wiadows 2000, Windows XP, Windows Server 2003 以及 Windows Vista)

szCSDVersion: 此字段包含额外的文本,提供了与已安装的操作系统有关的更多的信息

wServicePackMajor: 最新安装的Service Pack的主版本号

wServicePackMinor: 最新安装的Service Pack的次版本号

wSaiteMask: 标识当前系统上可用的suite(s),包括VER_SUITE_SMALLBUSINESS, VER_SUITE_ENTERPRISE, VER_SUITE_BACKOFTICE, VER_SUITE_ COMMUNICATIONS. VER_SUITE_TERMINAL, VER_SUITE_SMALLBUSINESS_ RESTRICTED. VER_SUITE_EMBEDDEDNT. VER_SUITE_DATACENTER, VER_SUITE_SINGLEUSERTS(每个用户一个终端服务会话), VER_SUITE-PERSONAL(用来区别 Vista 的 Home 版本和 Professional 版)本, VER_ SUITE_BLADE. VER_SUITE_EMBEDDED_RESTRICTED, VER_SUITE_SECURITY_APPLIANCE • VER_SUITE_STORAGE_SERVER 和 VER_SUITE_ COMPUTE_SERVER

wProductype: 指出安装的是以下操作系统产品中的哪一个:VER_NT_WORKSTATION, VER_NT_SERVER或VER_NT_DOMAIN_CONTROLLER

wRoerved: 保留,供将来使用

OSVERSIONINFOEX结构从Windows 2000开始就一直存在。Windows系统的其他版本使用的是较老的OSVERSIONINFO结构,后者没有wServicePackMajor, wSuiteMask,wProductType 和 wReservedMembers成员.

代码参考:

#include <windows.h>
#include <iostream>
#include <tchar.h>
#include "math.h"
#include "atlstr.h"

using namespace std;





void _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	setlocale(LC_ALL, "Chinese-simplified");


	OSVERSIONINFOEX OsVersionInfortion;
	OsVersionInfortion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
	GetVersionEx((OSVERSIONINFO*)&OsVersionInfortion);


	CString OSystemVersinName;

	switch (OsVersionInfortion.dwPlatformId)
	{

	case VER_PLATFORM_WIN32_NT:
		if (OsVersionInfortion.dwMajorVersion <= 4)
			OSystemVersinName = _T("WindowsNT");
		if (OsVersionInfortion.dwMajorVersion == 5 && OsVersionInfortion.dwMinorVersion == 0)
			OSystemVersinName = _T("Windows2000");
		if (OsVersionInfortion.dwMajorVersion == 5 && OsVersionInfortion.dwMinorVersion == 1)
			OSystemVersinName = _T("WindowsXP");
		if (OsVersionInfortion.dwMajorVersion == 5 && OsVersionInfortion.dwMinorVersion == 2)
			OSystemVersinName = _T("Windows2003");
		if (OsVersionInfortion.dwMajorVersion == 6 && OsVersionInfortion.dwMinorVersion == 0)
			OSystemVersinName = _T("WindowsVista");
		if (OsVersionInfortion.dwMajorVersion == 6 && OsVersionInfortion.dwMinorVersion == 1)
			OSystemVersinName = _T("Windows7");
		if (OsVersionInfortion.dwMajorVersion == 6 &&OsVersionInfortion.dwMinorVersion == 2)
			OSystemVersinName = _T("Windows10");
	}

	_tprintf(_T("%s\r\n"),OSystemVersinName);



	_tprintf(_T("Input AnyKey Exit\r\n"));
	getchar();
	return;
}


相关函数整理:
GetComputerName
GetUserName
GetSystemDirectory
GetWindowsDirectory

详细参考:
https://blog.csdn.net/yyingwei/article/details/8286658?
来源书籍:Windows核心编程

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值