文章目录[隐藏]
我们可以利用GetVersionExA来获取windows 8上获取系统版本信息,GetVersionExA是kernel32里的一个API,这里提供对这个API的学习调用,要想取得准确的版本我们还得结合注册表,去判断封装。
GetVersionExA
.版本 2 .DLL命令 GetVersionExA, 逻辑型, "kernel32", "GetVersionExA" .参数 lpVersionInformation, OSVERSIONINFO, , 0
数据类型 OSVERSIONINFO
.版本 2 .数据类型 OSVERSIONINFO .成员 dwOSVersionInfoSize, 整数型, , , //初始化为结构的大小 .成员 dwMajorVersion, 整数型, , , //系统主版本号 .成员 dwMinorVersion, 整数型, , , //系统次版本号 .成员 dwBuildNumber, 整数型, , , //系统构建号 .成员 dwPlatformId, 整数型, , , //系统支持的平台(详见附1) .成员 szCSDVersion, 整数型, , "128", //系统补丁包的名称 .成员 wServicePackMajor, 整数型, , , //系统补丁包的主版本 .成员 wServicePackMinor, 整数型, , , //系统补丁包的次版本 .成员 wSuiteMask, 整数型, , , //标识系统上的程序组 .成员 wProductType, 整数型, , , //标识系统类型 .成员 wReserved, , , , //保留,未使用
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;
这个结构在Windows 2000后出现,老版本的OSVERSIONINFO结构没有wServicePackMajor、wServicePackMinor、wSuiteMask、wProductType和wReserved这几个成员。
易语言调用
.版本 2 .支持库 spec .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 .局部变量 a, OSVERSIONINFO a.dwOSVersionInfoSize = 156 GetVersionExA (a) 调试输出 (a.dwMajorVersion) 调试输出 (a.dwMinorVersion)
我们要根据主版本dwMajorVersion和次版本号dwMinorVersion的组合来判断系统版本,参考如下:
附1:dwPlatformId的值
VER_PLATFORM_WIN32s (Win32s),
VER_PLATFORM_WIN32_WINDOWS (Windows 95/Windows 98),
VER_PLATFORM_WIN32_NT (Windows NT/Windows 2000),
VER_PLATFORM_WIN32_CEHH (Windows CE).
附2:wSuiteMask的值:
VER_SUITE_SMALLBUSINESS,
VER_SUITE_ENTERPRISE,
VER_SUITE_BACKOFFICE,
VER_SUITE_COMMUNICATIONS,
VER_SUITE_TERMINAL,
VER_SUITE_SMALLBUSINESS_RESTRICTED,
VER_SUITE_EMBEDDEDNT,
VER_SUITE_DATACENTER.
附3:wProductType的值:
VER_NT_WORKSTATION,
VER_NT_SERVER,
VER_NT_DOMAIN_CONTROLLER.
MSDN api 链接
https://docs.microsoft.com/zh-cn/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversionexa