【已解决】怎么获取内存的品牌和几代
本帖最后由 hljkwan 于 2021-11-9 20:51 编辑类似就是怎么写代码能完整获取到内存的品牌和DDR几 ;===============================================================================
; Description: Returns the Memory information in an array.
; Parameter(s): $aMemoryInfo - By Reference - Memory Information array.
; Requirement(s): None
; Return Value(s):On Success - Returns array of Memory Information.
; $aMemoryInfo[$i] = Name
; $aMemoryInfo[$i] = BankLabel
; $aMemoryInfo[$i] = Capacity
; $aMemoryInfo[$i] = CreationClassName
; $aMemoryInfo[$i] = Description
; $aMemoryInfo[$i] = DataWidth
; $aMemoryInfo[$i] = DeviceLocator
; $aMemoryInfo[$i] = FormFactor
; $aMemoryInfo[$i] = HotSwappable
; $aMemoryInfo[$i] = InterleaveDataDepth
; $aMemoryInfo[$i] = InterleavePosition
; $aMemoryInfo[$i] = Manufacturer
; $aMemoryInfo[$i] = MemoryType
; $aMemoryInfo[$i] = Model
; $aMemoryInfo[$i] = OtherIdentifyingInfo
; $aMemoryInfo[$i] = PartNumber
; $aMemoryInfo[$i] = PositionInRow
; $aMemoryInfo[$i] = PoweredOn
; $aMemoryInfo[$i] = Removable
; $aMemoryInfo[$i] = Replaceable
; $aMemoryInfo[$i] = SerialNumber
; $aMemoryInfo[$i] = SKU
; $aMemoryInfo[$i] = Speed
; $aMemoryInfo[$i] = Status
; $aMemoryInfo[$i] = Tag
; $aMemoryInfo[$i] = TotalWidth
; $aMemoryInfo[$i] = TypeDetail
; $aMemoryInfo[$i] = Version
; On Failure - @error = 1 and Returns 0
; @extended = 1 - Array contains no information.
; 2 - $colItems isnt an object.
; Author(s): Jarvis Stubblefield (support "at" vortexrevolutions "dot" com)
; Note(s):
;===============================================================================
Func _ComputerGetMemory(ByRef $aMemoryInfo)
Local $colItems, $objWMIService, $objItem
Dim $aMemoryInfo, $i = 1
$objWMIService = ObjGet("winmgmts:\\" & $cI_Compname & "\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.Name
$aMemoryInfo[$i] = $objItem.BankLabel
$aMemoryInfo[$i] = $objItem.Capacity
$aMemoryInfo[$i] = $objItem.CreationClassName
$aMemoryInfo[$i] = $objItem.Description
$aMemoryInfo[$i] = $objItem.DataWidth
$aMemoryInfo[$i] = $objItem.DeviceLocator
$aMemoryInfo[$i] = $objItem.FormFactor
$aMemoryInfo[$i] = $objItem.HotSwappable
$aMemoryInfo[$i] = $objItem.InterleaveDataDepth
$aMemoryInfo[$i] = $objItem.InterleavePosition
$aMemoryInfo[$i] = $objItem.Manufacturer
$aMemoryInfo[$i] = $objItem.MemoryType
$aMemoryInfo[$i] = $objItem.Model
$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
$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
SetError(1, 1, 0)
EndIf
Else
SetError(1, 2, 0)
EndIf
EndFunc ;_ComputerGetMemory
https://github.com/cornernote/autoit-poker_bot/blob/master/includes/vendor/CompInfo/CompInfo.au3 虫子樱桃 发表于 2021-10-26 14:01
https://github.com/cornernote/autoit-poker_bot/blob/master/includes/vendor/CompInfo/CompInfo.au3
万分感谢~~~! 本帖最后由 hljkwan 于 2021-10-26 18:16 编辑
虫子樱桃 发表于 2021-10-26 14:01
https://github.com/cornernote/autoit-poker_bot/blob/master/includes/vendor/CompInfo/CompInfo.au3
不好意思,打扰了,这是怎么回事了
hljkwan 发表于 2021-10-26 18:08
不好意思,打扰了,这是怎么回事了
#include 了就不需要再复制上面的函数定义了,已经包含了,直接使用 _ComputerGetMemory 本帖最后由 sh1536 于 2021-10-26 20:15 编辑
一次查询所有的内存设备WIN32的所有属性,借用樱桃大神的代码更新下,顺便做个标记,下次用的时候方便
“.Manufacturer”这个属性获得品牌的英文名字,要获得中文名字,最好再封装一个函数“.MemoryType”理论上这个属性可以获得内存类型,但是我在自己电脑上测试获得是0,官方文件也说“May not be available”,可以通过
“.Speed”这个属性来判断是第几代,不过需要再封装一个函数,一般速率和代数是对应的
PS:论坛的代码上传怎么会少一个 \
第19行掉了一个符号,改为:$objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2")
#include <Array.au3>
$Result = _ComputerGetMemory()
_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:\\" & $cI_CompName & "\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
afan 发表于 2021-10-26 19:21
#include 了就不需要再复制上面的函数定义了,已经包含了,直接使用 _ComputerGetMemory
好的,非常感谢 sh1536 发表于 2021-10-26 20:10
一次查询所有的内存设备WIN32的所有属性,借用樱桃大神的代码更新下,顺便做个标记,下次用的时候方便
“. ...
感谢~~感谢~~感谢 sh1536 发表于 2021-10-26 20:10
一次查询所有的内存设备WIN32的所有属性,借用樱桃大神的代码更新下,顺便做个标记,下次用的时候方便
“. ...
是否可以直接使用#incude使用?目测使用后软件无法打开 hljkwan 发表于 2021-10-26 20:47
是否可以直接使用#incude使用?目测使用后软件无法打开
把我发的代码单独放在一个文件里是否可以正常运行,正常是要弹出一个窗口的,注意改一下第19行 sh1536 发表于 2021-10-26 20:50
把我发的代码单独放在一个文件里是否可以正常运行,正常是要弹出一个窗口的,注意改一下第19行
运行正常,但是窗口是不弹出的 sh1536 发表于 2021-10-26 20:50
把我发的代码单独放在一个文件里是否可以正常运行,正常是要弹出一个窗口的,注意改一下第19行
直接就结束了,没有任何弹窗显示
MsgBox(0, "", @error ? @error : "运行正常")
把这一行加在第三行下面,看下提示的是什么 sh1536 发表于 2021-10-26 21:02
把这一行加在第三行下面,看下提示的是什么
一样,没有任何提示,正常运行 你电脑是win7吧,我是在win10上测试的,刚在虚拟机里试了确实是有问题的,再改一下
页:
[1]
2