如何访问
uint64
结构中的 VARIANT
?
例如:
VARIANT vtProp{};
hres = pclsObj->Get(L"FreeSpaceInPagingFiles", 0, &vtProp, 0, 0);
strSystemInfo.AppendFormat(L" Free Space In Paging Files: %d\r\n", vtProp.iVal);
Win32_ComputerSystem
类的属性。
我不明白为什么我得到:
Total Virtual Memory Size: 1860884006920
Total Visible Memory Size: 1860884006920
使用此代码:
hres = pclsObj->Get(L"TotalVirtualMemorySize", 0, &vtProp, 0, 0);
strSystemInfo.AppendFormat(L" Total Virtual Memory Size: %lld\r\n", vtProp.ullVal);
VariantClear(&vtProp);
hres = pclsObj->Get(L"TotalVisibleMemorySize", 0, &vtProp, 0, 0);
strSystemInfo.AppendFormat(L" Total Visible Memory Size: %lld\r\n", vtProp.ullVal);
VariantClear(&vtProp);
但是 PowerShell:
Get-WmiObject -Class "Win32_operatingsystem" | Format-List *
报告:
TotalVirtualMemorySize : 35567932
TotalVisibleMemorySize : 33470780
我做错了什么?
例如,对于
Win32_ComputerSystem.TotalPhysicalMemory
,文档说:
TotalPhysicalMemory
数据类型:
uint64
访问类型:只读
限定符:MappingStrings(“Win32API |内存管理结构|MEMORYSTATUS | dwTotalPhys”),单位(“字节”)
物理内存的总大小。请注意,在某些情况下,此属性可能不会返回物理内存的准确值。例如,如果 BIOS 正在使用某些物理内存,则它是不准确的。要获得准确的值,请改用
中的容量属性。Win32_PhysicalMemory
示例:67108864
有关在脚本中使用
值的更多信息,请参阅 WMI 中的脚本编写。uint64
说实话,当我很难正确解释
VARIANT
对象数据时,使用哪种内存值属性并不重要。
我有部分答案:
bstrVal
中的值是正确的。
所以,拿
Capacity
,我得到:
Total Physical Memory: 17179869184
Total Physical Memory: 17179869184
值与 PowerShell 匹配:
Capacity : 17179869184
我有2家银行,所以总数是
34359738368
。这类似于 Win32_ComputerSystem.TotalPhysicalMemory
-> Installed RAM: 34274078720
。
简短的回答是,我可以使用
bstrVal
来获取 PowerShell 显示的实际值。但我如何将 bstrVal
转换为合适的 GB 值则是另一回事了。