现如今系统版本主要有:
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核心编程