程序通过命令行获取操作系统名称+版本+CPU名称等:Part2

34 篇文章 2 订阅
24 篇文章 4 订阅

(一)沿用的方法

参考:《程序通过命令行获取操作系统名称+版本+CPU名称等各种信息》

(二)问题和调整

(2.1)Windows11的版本号是10.0

这是微软自己搞出来的问题。
大版本号一样,只能通过后面的小版本号build来判断是11还是10。
所以如果用cmd或者ver来取版本号。
Win11目前是这样的:

C:\>cmd /C ver
Microsoft Windows [Version 10.0.22621.2361]

Win10则是这样的(请问有啥区别):

C:\>cmd /C ver
Microsoft Windows [Version 10.0.19045.3448]

为了清晰的看出是Win11,还是Win10,只好不用ver,而是通过wmic。
可以比较清晰的看出Windows各个版本。

C:\>wmic os get caption,version
Caption                           Version
Microsoft Windows 11 Pro / 专业版  10.0.22621

(2.2)Golang和管道符号(Linux)

还记得之前写的Golang调用命令行比其它语言麻烦一点,需要把命令和参数分开传递
有管道符的命令就不灵了,比如:

> cat /proc/cpuinfo | grep 'model name' | uniq | cut -d':' -f 2

上面这样句怎么调用都不会有结果。
需要在前面田间bash -c,具体执行的语句变成了:

exec.Command("bash", "-c", "cat /proc/cpuinfo | grep 'model name' | uniq | cut -d':' -f 2")

(2.3)Lazarus(FPC)和带参数的命令(Win)

和Delphi不一样,FPC的TProcess把命令和参数分开传递的。
而调用这句的时候,居然取不到结果:

RunCMD('wmic','os get Caption');

需要改成调用cmd,如下:

RunCMD('cmd.exe','/C wmic os get Caption')

(2.4)最大内存容量 vs 当前安装内存容量 (Win)

不知道哪里抄的wmic.exe memphysical get maxcapacity
简单测了一下似乎是正常的(单位KB)。

C:\> wmic memphysical get maxcapacity
MaxCapacity
33554432

换台电脑发现数字不对……这才知道,这个数字,是电脑能够安装的最大内存容量,并不是当前安装的内存容量。
得换成(单位Byte):

C:\> wmic ComputerSystem get TotalPhysicalMemory
TotalPhysicalMemory
34182582272

或者(单位KB):

C:\> wmic os get TotalVisibleMemorySize
TotalVisibleMemorySize
33381428

不过并不是整数的32GB,和任务管理器里面看到的一致为31.8GB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值