无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 8545|回复: 19
打印 上一主题 下一主题

[分享] 易语言 获得系统版本和位数 2016.07.04 更新

[复制链接]
跳转到指定楼层
1#
发表于 2016-6-24 23:26:55 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dos时代菜鸟 于 2016-7-4 17:10 编辑

既然最近有这么多 需要判断 系统版本和位数的 ,干脆我用 易语言 写个现成的 程序算了。
附件里有 易语言源码 和判断位数的 易模块。
在 cmd 下 运行 ver_x2 就得到 当前系统名字和位数。
需要实践和时间的检验。

1、通过 ntdll 中的句柄获得系统 版本,并 根据 ver_x2.txt 中的数据信息 得出当前系统 的 name ,如果有新系统了,可以把信息添加到 ver_x2.txt 中就可以了,方便随时 更新数据。(在此感谢 yjd  的 建议。)
2、通过 iswow64process 句柄判断系统是否运行在 64位下。

增加了几个参数  0, 1, 2  会有不同的显示
要想的 诸如 windows_7.x32 的结果,只需要 运行
  1. ver_s   0
复制代码
即可

2016.06.29 更新
解决 服务器和 工作站 对应相同版本号时,无法确定系统 名称的问题。改进了 ver_x2.txt的结构。
用到了 kernel32.dll 的 GetVersionEx 句柄 获知是否为服务器

ver_s.7z

264.41 KB, 下载次数: 49, 下载积分: 无忧币 -2

易语言5.5破解补丁.7z

126.87 KB, 下载次数: 17, 下载积分: 无忧币 -2

仅用于学习研究,不得用于盈利。

2#
 楼主| 发表于 2016-6-25 08:10:31 | 显示全部楼层
不知道 e语言 的 这个 取系统信息 的函数 ,是否也是通过 版本号 来识别的。
如果是那样的,还不如 自己 用 txt 文件 建个版本号数据库,有新系统出来了,就添进去。
回复

使用道具 举报

3#
 楼主| 发表于 2016-6-25 20:27:17 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2016-6-25 20:29 编辑
yjd 发表于 2016-6-25 09:14
你用易自带有点老不一定支持新系统,据说直接调用微软这个api,很准确 RtlGetNtVersionNumbers


嗯,那个获得的 也是 版本号,
e语言 应该也是 通过这个获取的,然后,通过内建的 对应库 显示出对应的 系统名称。
如果 e语言的 库 老,当然就不支持新系统。

所以我 考虑 弄个全的 对应 关系表。做成 txt ,让 Vbs 也好,cmd 也好 ,易语言也好,还是什么其他的 语言 或者脚本,其实就是 通过各种方式 调用 api 句柄 RtlGetNtVersionNumbers,获得 版本号,然后 我们再 通过读取 那个 txt文件 获得对应的 系统名称,如果有新系统来了,就直接把 对应关系填到 txt 里面就是了。

网上找,也没 弄到个 明确的 全的 版本号.内部版本号 确定系统名称 的对应表.

点评

整理了一下,大部分应该涵盖了,大版本号: 但是同样的6.1或6.2对应两个系统,就不知道怎么区分了…… 5.0 win2000 5.1 xp 5.2 xp-64、server2003 6.0 vista、server2008 6.1 win7、server2008-R2 6.2  详情 回复 发表于 2016-6-28 18:02
回复

使用道具 举报

4#
 楼主| 发表于 2016-6-28 11:21:55 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2016-6-28 12:40 编辑

更新
感谢 yjd  的建议 ,用 ntdll 中的 句柄实现版本获取。
命令返回两行信息,第一行是 根据 版本号+ver_x2.txt 得到的系统名称,第二行 是版本号+内部版本号+ver_x2.txt 得出的系统信息。

ver_x2.txt 支持 用 单引号开头的 整行注释
ver_x2.exe 可以附带参数 0 或 1 或 2  或不带参数


具体看一楼
回复

使用道具 举报

5#
 楼主| 发表于 2016-6-28 18:29:06 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2016-6-28 21:57 编辑
netmjwork 发表于 2016-6-28 18:02
整理了一下,大部分应该涵盖了,大版本号:
但是同样的6.1或6.2对应两个系统,就不知道怎么区分了……
...


一个号 两个名 ,应该是 workst。。。 和 server 的区别,需要找个能区分服务器 和工作站 的 api 句柄

我就知道 vbs 调用 wmi 的 win32_operationsystem 有个文本 叫做 ProductType 可以体现 工作站 还是服务器,不知道 具体是调用了 什么 dll的句柄实现的。这个 class 还能直接 返回当前系统name 包括wes 。
回复

使用道具 举报

6#
 楼主| 发表于 2016-6-29 00:50:51 | 显示全部楼层
2016.06.29 更新
解决 服务器和 工作站 对应相同版本号时,无法确定系统 名称的问题。
用到了 kernel32.dll 的 GetVersionEx 句柄 获知是否为服务器

ver_x2.2.7z

269.93 KB, 下载次数: 2, 下载积分: 无忧币 -2

回复

使用道具 举报

7#
 楼主| 发表于 2016-6-30 18:58:08 | 显示全部楼层
不知道 win10 结果准确不。谁 测试过
回复

使用道具 举报

8#
 楼主| 发表于 2016-6-30 22:13:01 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2016-6-30 23:08 编辑

https://msdn.microsoft.com/en-us/library/ms724832(v=vs.85).aspx
详细列出了 自 win_2k/nt5 以来windows的版本和name的对应关系。

还有 getversionEx 不能正常反映win10版本 等问题,
看完,啥都明白了。

ver_s.7z (269.44 KB, 下载次数: 0) 2016.06.30
回复

使用道具 举报

9#
 楼主| 发表于 2016-7-2 23:37:48 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2016-7-2 23:39 编辑

@yjd
你是说 e语言自带的 取命令行 函数有问题? 是什么系统环境啊,win10么?
是我编译完 的  exe 取参数时 出现的错误么?
需要用 kernel32 的 getcommandline 句柄?
那 e语言的 取运行目录 函数呢?我昨天改了下 txt 结构,把txt 改成ini 了。调用时需要指明 路径。唉!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-5 21:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表