我们可以利用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