从本地计算机的C ++获取WMI数组数据 [英] C++ Getting WMI Array Data from the Local Computer
问题描述
我在用c ++从WMI类检索数组数据面临的问题。
I am facing problem in retrieving array data from a WMI class using c++.
在下面的链接,的http:// msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx ,示例的步骤7向我们展示了如何检索WMI查询字符串值跑去。不过,我目前所面临的一个问题,当从查询返回的值是一个数组UINT16。
In the following link, http://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx, step 7 of the example shows us how to retrieve a string value of the wmi query ran. However, I am currently facing an issue when the value returned from the query is an uint16 array.
如。
结果查询:选择从Win32_SystemEnclosure ChassisTypes
eg.
Query: "Select ChassisTypes from Win32_SystemEnclosure"
搜索结果:
结果_ 属:2
结果的_class:Win32_SystemEnclosure
结果_ SUPERCLASS:
结果的_DYNASTY:
结果_ RELPATH:
结果的_PROPERTY_COUNT:1
结果_ 推导:{}
结果的_SERVER:
结果_ 命名空间:
结果的_PATH:
结果ChassisTypes:{3}
Result:
_GENUS : 2
_CLASS : Win32_SystemEnclosure
_SUPERCLASS:
_DYNASTY:
_RELPATH:
_PROPERTY_COUNT: 1
_DERIVATION: {}
_SERVER:
_NAMESPACE:
_PATH:
ChassisTypes: {3}
请问我该如何实际处理结果检索在这种情况下,阵列ChassisType的整数值?谢谢!
May I ask how do I actually process the result to retrieve the integer value of ChassisType from the array in this case? Thank you!
推荐答案
要从一个WMI属性访问数组值可以使用的 SafeArrayGetElement
,的 SafeArrayGetLBound 和的 SafeArrayGetUBound 方法。
To access the array values from a WMI property you can use the SafeArrayGetElement
, SafeArrayGetLBound and SafeArrayGetUBound methods.
试试这个样本
VARIANT vtProp;
hr = pclsObj->Get(L"ChassisTypes", 0, &vtProp, 0, 0);// Uint16
if (!FAILED(hr))
{
if ((vtProp.vt==VT_NULL) || (vtProp.vt==VT_EMPTY))
wcout << "ChassisTypes : " << ((vtProp.vt==VT_NULL) ? "NULL" : "EMPTY") << endl;
else
if ((vtProp.vt & VT_ARRAY))
{
wcout << "ChassisTypes : " << endl;
long lLower, lUpper;
UINT32 Element = NULL;
SAFEARRAY *pSafeArray = vtProp.parray;
SafeArrayGetLBound(pSafeArray, 1, &lLower);
SafeArrayGetUBound(pSafeArray, 1, &lUpper);
for (long i = lLower; i <= lUpper; i++)
{
hres = SafeArrayGetElement(pSafeArray, &i, &Element);
wcout << Element<< endl;
}
SafeArrayDestroy(pSafeArray);
}
VariantClear(&vtProp);
pclsObj->Release();
pclsObj=NULL;
}
这篇关于从本地计算机的C ++获取WMI数组数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!