如何使用VBScript读取注册表中REG_QWORD类型的GPU显存数值
WScript.Shell提供的RegRead方法原生不支持REG_QWORD类型的键值读取,这是你运行失败的根本原因。
以下是适配你IE9+VBScript场景的可行方案,通过WMI的StdRegProv类读取QWORD值:
Const HKEY_LOCAL_MACHINE = &H80000002 ' 64位系统访问64位注册表的标识,32位系统可以删除该常量及后续引用 Const KEY_WOW64_64KEY = &H40 Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") For Each oItem in colGPUs memory = oItem.AdapterRAM / 1048576 If memory < 0 Then If InStr(oItem.Name, "NVIDIA") Then keyPath = "SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\000" & GPUID valueName = "HardwareInformation.qwMemorySize" Dim highPart, lowPart ' 读取QWORD拆分的高低32位DWORD值 oReg.GetDWORDValue HKEY_LOCAL_MACHINE, keyPath, valueName & ".HighPart", highPart, , KEY_WOW64_64KEY oReg.GetDWORDValue HKEY_LOCAL_MACHINE, keyPath, valueName & ".LowPart", lowPart, , KEY_WOW64_64KEY ' 拼接为完整64位数值,转换为MB单位 fullVRAM = (highPart * 2^32 + lowPart) / 1048576 MsgBox CStr(fullVRAM) & " MB" End If End If Next
注意事项
- IE9运行该代码需要在安全设置中开启「对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本」权限,否则会触发权限报错
- 如果你的系统是32位,删除代码中所有和
KEY_WOW64_64KEY相关的内容即可 - 单位转换可根据需求调整除数,如需转换为GB可将
1048576替换为1073741824
内容的提问来源于stack exchange,提问作者idkplshelpme
相关产品推荐
相关产品推荐

