从本地计算机的C ++获取WMI数组数据 [英] C++ Getting WMI Array Data from the Local Computer

查看:225
本文介绍了从本地计算机的C ++获取WMI数组数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆