无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 9698|回复: 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-24 23:37:31 来自手机 | 只看该作者
哇哦,楼主都会些什么语言呢?
回复

使用道具 举报

3#
发表于 2016-6-25 00:27:34 | 只看该作者
学习一下,大神又来了
回复

使用道具 举报

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

使用道具 举报

5#
发表于 2016-6-25 09:14:09 | 只看该作者
你用易自带有点老不一定支持新系统,据说直接调用微软这个api,很准确 RtlGetNtVersionNumbers

点评

嗯,那个获得的 也是 版本号, e语言 应该也是 通过这个获取的,然后,通过内建的 对应库 显示出对应的 系统名称。 如果 e语言的 库 老,当然就不支持新系统。 所以我 考虑 弄个全的 对应 关系表。做成 txt ,  详情 回复 发表于 2016-6-25 20:27
回复

使用道具 举报

6#
 楼主| 发表于 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
回复

使用道具 举报

7#
 楼主| 发表于 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  或不带参数


具体看一楼
回复

使用道具 举报

8#
发表于 2016-6-28 18:02:40 | 只看该作者
dos时代菜鸟 发表于 2016-6-25 20:27
嗯,那个获得的 也是 版本号,
e语言 应该也是 通过这个获取的,然后,通过内建的 对应库 显示出对应 ...

整理了一下,大部分应该涵盖了,大版本号:
但是同样的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  win8、server2012
6.3  win8.1、server2012-R2
6.4  win10(早期版本)
10.0  win10(新版本)

点评

一个号 两个名 ,应该是 workst。。。 和 server 的区别,需要找个能区分服务器 和工作站 的 api 句柄  详情 回复 发表于 2016-6-28 18:29
回复

使用道具 举报

9#
 楼主| 发表于 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 。
回复

使用道具 举报

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

ver_x2.2.7z

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

回复

使用道具 举报

11#
 楼主| 发表于 2016-6-30 18:58:08 | 只看该作者
不知道 win10 结果准确不。谁 测试过
回复

使用道具 举报

12#
 楼主| 发表于 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
回复

使用道具 举报

13#
发表于 2016-7-2 22:00:05 | 只看该作者
本帖最后由 yjd 于 2016-7-2 22:13 编辑

下了你代码改了一下。编译成黑月版。17kb大小

ver_x2.3.rar (11.63 KB, 下载次数: 6)
回复

使用道具 举报

14#
 楼主| 发表于 2016-7-2 23:37:48 | 只看该作者
本帖最后由 dos时代菜鸟 于 2016-7-2 23:39 编辑

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

使用道具 举报

15#
发表于 2016-7-3 09:12:02 | 只看该作者
@dos时代菜鸟
就那个取命令行。
用易命令黑月编译出来调试发现会有2个成员但是都是空值,不是0。你后面的语句就没法执行了。我直接改成微软api。
有时候易封装太多也不是好事。

你是要改成读写ini配置吗?用读配置项,写配置项命令这个是微软也是有专门的读写api。
本来合理的写法是要传配置文件绝对路径最好。
你要是写那种exe和配置文件不在同一个地方。而且你的exe又不在系统path搜索目录下。那会导致找不到。
回复

使用道具 举报

16#
发表于 2016-7-5 22:46:52 | 只看该作者
易语言有点难学.
回复

使用道具 举报

17#
发表于 2016-7-7 17:14:37 | 只看该作者
谢谢提供,继续努力!
回复

使用道具 举报

18#
发表于 2016-9-12 23:16:14 | 只看该作者
这么好的帖子不顶就太对不起楼主了












民间捉鬼师,重庆民间道士
回复

使用道具 举报

19#
发表于 2016-10-22 01:01:42 | 只看该作者
学习了
回复

使用道具 举报

20#
发表于 2019-6-28 13:21:43 | 只看该作者
感谢分享!!!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 16:51

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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