#AutoIt3Wrapper_UseX64=n
#include <Array.au3>
$Result = _ComputerGetMemory()
MsgBox(0, "", @error ? @error : "运行正常")
_ArrayDisplay($Result, "WMI类 - Win32_PhysicalMemory 所有属性(内存条)", "", 0, Default, _
'属性|库标签|容量(单位KB)|描述|时钟速度|电压|类名|内存带宽|描述|设备定位器|' & _
'存在形式|是否支持热插拔|安装日期(无值)|数据交错深度|交错的位置|生产商|最大电压|' & _
'内存类型|最小电压|型号|名字|其他识别信息|零件编号|行位置|是否接通电源|是否可拆卸|' & _
'是否可更换|编号|SKU|SMBIOS内存类型|速率|状态|标签|总宽度(位)|类型详细信息|版本信息')
Func _ComputerGetMemory()
;https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemory
;2021.07.01
Local $wbemFlagReturnImmediately = 0x10
Local $wbemFlagForwardOnly = 0x20
Local $cI_CompName = @ComputerName
Local $colItems, $objWMIService, $objItem
Dim $aMemoryInfo, $i = 1
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
ReDim $aMemoryInfo
;~ $aMemoryInfo[$i] = $objItem.Attributes ;属性
;~ $aMemoryInfo[$i] = $objItem.BankLabel ;库标签
$aMemoryInfo[$i] = $objItem.Capacity ;容量(单位KB)
$aMemoryInfo[$i] = $objItem.Caption ;描述
;~ $aMemoryInfo[$i] = $objItem.ConfiguredClockSpeed ;时钟速度
;~ $aMemoryInfo[$i] = $objItem.ConfiguredVoltage ;电压
$aMemoryInfo[$i] = $objItem.CreationClassName ;类名
$aMemoryInfo[$i] = $objItem.DataWidth ;内存带宽
$aMemoryInfo[$i] = $objItem.Description ;描述
$aMemoryInfo[$i] = $objItem.DeviceLocator ;设备定位器
$aMemoryInfo[$i] = $objItem.FormFactor ;存在形式
$aMemoryInfo[$i] = $objItem.HotSwappable ;是否支持热插拔
$aMemoryInfo[$i] = $objItem.InstallDate ;安装日期(无值)
$aMemoryInfo[$i] = $objItem.InterleaveDataDepth;数据交错深度
$aMemoryInfo[$i] = $objItem.InterleavePosition ;交错的位置
$aMemoryInfo[$i] = $objItem.Manufacturer ;生产商
;~ $aMemoryInfo[$i] = $objItem.MaxVoltage ;最大电压
$aMemoryInfo[$i] = $objItem.MemoryType ;内存类型
;~ $aMemoryInfo[$i] = $objItem.MinVoltage ;最小电压
$aMemoryInfo[$i] = $objItem.Model ;型号
$aMemoryInfo[$i] = $objItem.Name ;名字
$aMemoryInfo[$i] = $objItem.OtherIdentifyingInfo ;其他识别信息
$aMemoryInfo[$i] = $objItem.PartNumber ;零件编号
$aMemoryInfo[$i] = $objItem.PositionInRow ;行位置
$aMemoryInfo[$i] = $objItem.PoweredOn ;是否接通电源
$aMemoryInfo[$i] = $objItem.Removable ;是否可拆卸
$aMemoryInfo[$i] = $objItem.Replaceable ;是否可更换
$aMemoryInfo[$i] = $objItem.SerialNumber ;编号
$aMemoryInfo[$i] = $objItem.SKU ;SKU
;~ $aMemoryInfo[$i] = $objItem.SMBIOSMemoryType ;SMBIOS内存类型
$aMemoryInfo[$i] = $objItem.Speed ;速率
$aMemoryInfo[$i] = $objItem.Status ;状态
$aMemoryInfo[$i] = $objItem.Tag ;标签
$aMemoryInfo[$i] = $objItem.TotalWidth ;总宽度(位)
$aMemoryInfo[$i] = $objItem.TypeDetail ;类型详细信息
$aMemoryInfo[$i] = $objItem.Version ;版本信息
$i += 1
Next
$aMemoryInfo = UBound($aMemoryInfo) - 1 ;内存条数量
If $aMemoryInfo < 1 Then
Return SetError(1, 1, 0)
EndIf
Else
Return SetError(1, 2, 0)
EndIf
Return SetError(0, 0, $aMemoryInfo)
EndFunc ;_ComputerGetMemory
应该是可操作系统有关,win7有些属性没有,没有窗口弹出来应该是有报错的,我在虚拟机里试了下,需要注释掉这些属性,如果还是没有窗口弹出来,可以看看控制台的错误提示,也可以把控制台的数据贴上来
sh1536 发表于 2021-10-26 21:10
你电脑是win7吧,我是在win10上测试的,刚在虚拟机里试了确实是有问题的,再改一下
对的,我的是win7,不是win10,改哪里可以在win7正常运行 sh1536 发表于 2021-10-26 21:18
应该是可操作系统有关,win7有些属性没有,没有窗口弹出来应该是有报错的,我在虚拟机里试了下,需要注释 ...
厉害,出来了 sh1536 发表于 2021-10-26 21:18
应该是可操作系统有关,win7有些属性没有,没有窗口弹出来应该是有报错的,我在虚拟机里试了下,需要注释 ...
我是做了一个小软件,内存只是显示出来了多大,我是想完善一下,能显示内存的频率和内存的品牌还有内存是几代 sh1536 发表于 2021-10-26 21:18
应该是可操作系统有关,win7有些属性没有,没有窗口弹出来应该是有报错的,我在虚拟机里试了下,需要注释 ...
是这样的,做了一个小软件,只能显示容量,剩下的都不能显示
内存的品牌可以直接显示英文,如果想显示中文,就得去网上搜集一下英文对应的中文
第几代判断一下速率可以得出,一般速率越高的代数越高,这个也得网上找下代数对应的速率,不知道有什么方法可以直接获得代数,目前只想到这个曲线救国的方法 sh1536 发表于 2021-10-26 21:31
内存的品牌可以直接显示英文,如果想显示中文,就得去网上搜集一下英文对应的中文
第几代判断一下速率可以 ...
一样还是非常感谢了
页:
1
[2]