c++从本地计算机获取WMI数组数据

C++ Getting WMI Array Data from the Local Computer

本文关键字:WMI 数组 数据 获取 计算机 c++      更新时间:2023-10-16

我在使用c++从WMI类检索数组数据时面临问题。

在下面的链接http://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx中,示例的第7步向我们展示了如何检索运行的wmi查询的字符串值。然而,当从查询返回的值是uint16数组时,我目前面临一个问题。


查询:"Select chassistype from Win32_SystemEnclosure"


结果:
_属:2
_CLASS: Win32_SystemEnclosure
_ 超类:
_DYNASTY:
_ RELPATH:
_PROPERTY_COUNT: 1
_ 派生:{}
_SERVER:
_ 名称空间:
_PATH:
ChassisTypes: {3}

请问在这种情况下,我如何实际处理结果以从数组中检索ChassisType的整数值?谢谢你!

要从WMI属性访问数组值,您可以使用SafeArrayGetElement, SafeArrayGetLBound和SafeArrayGetUBound方法。

试试这个示例

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