参考:《程序通过命令行获取操作系统名称+版本+CPU名称等各种信息》
这是微软自己搞出来的问题。
大版本号一样,只能通过后面的小版本号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
还记得之前写的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")
和Delphi不一样,FPC的TProcess
把命令和参数分开传递的。
而调用这句的时候,居然取不到结果:
RunCMD('wmic','os get Caption');
需要改成调用cmd,如下:
RunCMD('cmd.exe','/C wmic os get Caption')
不知道哪里抄的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
,