【问题标题】:Get the row count of WMI Query in C++获取 C++ 中 WMI Query 的行数
【发布时间】:2014-06-17 15:27:52
【问题描述】:

以下 vbscript 给出了 WMI 查询返回的行数。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPSignedDriver",,0)
Wscript.Echo colItems.count

我需要在 C++ 中实现相同的目标。

在 C++ 中,使用 IWbemServices->ExecQuery 方法传递查询

....
//initializing and connecting WMI
....
hr = services->ExecQuery(bstr_t("WQL"), bstr_t(strClass), WBEM_FLAG_FORWARD_ONLY |   WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &results);

我尝试了上述方法,但不知道如何获取查询的行数。有人可以建议如何用 C++ 完成它

【问题讨论】:

    标签: c++ c windows wmi wmi-query


    【解决方案1】:

    AFAIK 该属性在 WMI COM API 中不存在,要获取您必须使用 IEnumWbemClassObject 接口并计算返回您自己的实例的记录数。

    【讨论】:

      【解决方案2】:

      你需要迭代结果:

      IWbemClassObject* pclsObj = NULL;
      int uRows = 0;
      
      while (pEnumerator)
      {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
      
        if (0 == uReturn)
        {
           break;
        }
      
        uRows++;
      }
      

      uRows 是您的“行数”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        相关资源
        最近更新 更多