易语言:根据内核准确判断操作系统版本

本贴已发布在精易论坛,相关图片、附件请前往精易论坛下载。源码内容均为原创

本贴链接:根据内核准确判断操作系统版本_精易论坛

本贴简介
为了让易语言程序准确获取操作系统类别版本,我使用了可靠的获取Windows内核版本和build号的未文档化的api(适用于Windows 2000及以上),编写了几道可靠的命令,可准确判断Windows系统类别版本,获取主、次版本号和build号,判断是服务器或客户Duan系统。命令截图和下载链接见末尾

概述
大家在使用易语言的时候,或多或少都碰到过获取操作系统类别版本(比如XP、7、8之类的)的问题吧!易语言系统提供的 获取操作系统类别2 命令十分的不可靠,尤其是Win10及以上系统直接失效 。分析了一下,发现Windows系统的api中常用用于获取系统版本的函数已经被弃用。包括GetVersion和GetVersionEX在Win8.1以上版本不可用(并且存在一些问题,返回值并不十分准确,会受到程序兼容性设置的影响),将始终返回对应Windows8.1的值。而在Win10中,VerifyVersionInfo也被弃用,在Windows系统提供的已文档化的api中,常用的已经没有可用来准确获取系统版本的了。
(如文末图,来自Microsoft Docs,已声明弃用。而版本帮助程序函数是适用于C++的类库,而非易语言直接可用的Windows api)

因此,我在网上查阅了大量的资料,发现了几个可行的方法
本模块提供的4道命令使用了系统ntdll.dll提供的命令RtlGetNtVersionNumbers 和shlwapi.dll的命令IsOS(简单明了,但由于是未文档化的命令,显得有些不为人知)
本模块提供的命令在Windows 2000及以上的客户Duan系统以及Windows Server 2003及以上的服务器系统可用,除了那些古老版本,几乎均可使用。
dll命令如文末图
运行原理
在dll获取了详细版本后,根据 Microsoft Docs中各版本系统的主版本和次版本参考 和 百du百科中一些较高版本系统的build号 来逐一判断并返回系统版本,绝对可靠。客户Duan版本系统中从Windows10开始,主版本号和次版本号不再改变,因此得根据build号范围判断Win10和Win11。服务器版本从Windows Server 2016开始,主版本号和次版本号不再改变,也得根据build号范围判断系统版本。
查阅的资料如下
Microsoft Docs中的 操作系统版本参考 https://learn.microsoft.com/zh-c ... ting-system-version
百du百科 Windows Server 2016的各版本系统build号 https://baike.baidu.com/item/Win ... 18708757?fr=aladdin
百du百科 Windows Server 2019的各版本系统build号 https://baike.baidu.com/item/Windows%20Server%202019/24272934?fr=aladdin
百du百科 Windows Server 2022的各版本系统build号 https://baike.baidu.com/item/Windows%20Server%202022/59326783?fr=aladdin
百du百科 Windows 10 各版本号 百度百科-验证
百du百科 Windows 11 各版本号  百度百科-验证
RtlGetNtVersionNumbers命令由于未文档化,Microsoft官网尚不能找到,网上信息也较少。这里是Wine API中对RtlGetNtVersionNumbers命令的声明和参数信息https://source.winehq.org/WineAPI/RtlGetNtVersionNumbers.html
具体判断过程见源码内

声明
本源码内命令方法均为原创,查阅大量资料,前后累计耗时4h左右,请尊重劳动成果,不喜勿喷。有些喜欢找事的人就不要看了。好东西要分享,各位易友可以随意使用,请勿用于非法用途,否则后果自负。

源码下载
已上传在精易论坛同样的本贴中,请前往下载
如果觉得本贴不错,各位大佬可以送出自己的评分嘛~感谢阅读(自身精币和好评也不减哟)

2023.2.5 21:14重新上传修正后的源码
修改了RtlGetNtVersionNumbers函数返回值判断的问题。本源码的命令理论在所有Windows 2000系统及以上通用,除非系统api ntdll.dll出现问题或其他特殊限制手段,否则本命令不会出现失败问题。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值