简体   繁体   English

C ++从本地计算机获取WMI阵列数据

[英]C++ Getting WMI Array Data from the Local Computer

I am facing problem in retrieving array data from a WMI class using c++. 我在使用c ++从WMI类检索数组数据时遇到问题。

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. 在下面的链接http://msdn.microsoft.com/zh-cn/library/aa390423(v=vs.85).aspx中 ,示例的步骤7向我们展示了如何检索运行的wmi查询的字符串值。 However, I am currently facing an issue when the value returned from the query is an uint16 array. 但是,当查询返回的值是uint16数组时,我当前遇到问题。

eg. 例如。
Query: "Select ChassisTypes from Win32_SystemEnclosure" 查询:“从Win32_SystemEnclosure选择机箱类型”


Result: 结果:
_ GENUS : 2 _ 类别:2
_CLASS : Win32_SystemEnclosure _CLASS:Win32_SystemEnclosure
_ SUPERCLASS: _ SUPERCLASS:
_DYNASTY: _王朝:
_ RELPATH: _ RELPATH:
_PROPERTY_COUNT: 1 _PROPERTY_COUNT:1
_ DERIVATION: {} _ 派生:{}
_SERVER: _服务器:
_ NAMESPACE: _ NAMESPACE:
_PATH: _路径:
ChassisTypes: {3} 机箱类型:{3}

May I ask how do I actually process the result to retrieve the integer value of ChassisType from the array in this case? 请问在这种情况下,如何实际处理结果以从数组中检索ChassisType的整数值? Thank you! 谢谢!

To access the array values from a WMI property you can use the SafeArrayGetElement , SafeArrayGetLBound and SafeArrayGetUBound methods. 要从WMI属性访问数组值,可以使用SafeArrayGetElementSafeArrayGetLBoundSafeArrayGetUBound方法。

Try this sample 试试这个样本

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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM