c++代码调用WMI 得到机器Model name.

原创 2012年03月22日 14:11:02

以下samle code 是使用WMI的一个例子,可以得到Model.如果要得到BIOS的其它内容,可以改换参数。

#include <windows.h>
#include <objbase.h>
#include <atlbase.h>
#include <iostream>
#include <wbemidl.h>
#include <comutil.h>
#pragma comment(lib, "comsuppw.lib")

int main( int argc, TCHAR** argv )
{
    int result = 0;
 HRESULT hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );
 if ( FAILED( hr ) )
 {
  std::cerr << "COM initialization failed" << std::endl;
  return -1;
 }

 // setup process-wide security context
 hr = CoInitializeSecurity( NULL, // we're not a server
          -1, // we're not a server
          NULL, // dito
          NULL, // reserved
          RPC_C_AUTHN_LEVEL_DEFAULT, // let DCOM decide
          RPC_C_IMP_LEVEL_IMPERSONATE,
          NULL,
          EOAC_NONE,
          NULL );
 if ( FAILED( hr ) )
 {
  std::cerr << "Security initialization failed" << std::endl;
  return -1;
 }

 // we're going to use CComPtr<>s, whose lifetime must end BEFORE CoUnitialize is called
 {
  // connect to WMI
  CComPtr< IWbemLocator > locator;
  hr = CoCreateInstance( CLSID_WbemAdministrativeLocator, NULL,
       CLSCTX_INPROC_SERVER,
       IID_IWbemLocator, reinterpret_cast< void** >( &locator ) );
  if ( FAILED( hr ) )
  {
   std::cerr << "Instantiation of IWbemLocator failed" << std::endl;
   return -1;
  }

      
  // connect to local service with current credentials
  CComPtr< IWbemServices > service;
  hr = locator->ConnectServer( L"root\\cimv2", NULL, NULL, NULL,
          WBEM_FLAG_CONNECT_USE_MAX_WAIT,
          NULL, NULL, &service );
   if ( SUCCEEDED( hr ) )
  {
     CComPtr< IEnumWbemClassObject > enumerator;
   hr = service->ExecQuery( L"WQL", L"SELECT * FROM Win32_computersystem",
             WBEM_FLAG_FORWARD_ONLY, NULL, &enumerator );
          
   if ( SUCCEEDED( hr ) )
   {
    CComPtr< IWbemClassObject > ptrInfo = NULL;
    ULONG retcnt;
    hr = enumerator->Next( WBEM_INFINITE, 1L, reinterpret_cast<IWbemClassObject**>( &ptrInfo ), &retcnt );
    if ( SUCCEEDED( hr ) )
    {
     if ( retcnt > 0 )
     {
      
          _variant_t var_val;
             hr = ptrInfo->Get( L"Model", 0, &var_val, NULL, NULL );
              if ( SUCCEEDED( hr ) )
      {
       _bstr_t str = var_val;
                         
                           
       std::cout << str << std::endl;
      }
      else
      {
       std::cerr << "IWbemClassObject::Get failed" << std::endl;
       result = -1;
      }
     }
     else
     {
      std::cout << "Enumeration empty" << std::endl;
     }
    }
    else
    {
     std::cerr << "Error in iterating through enumeration" << std::cerr;
     result = -1;
    }
              
   }
   else
   {
    std::cerr << "Query failed" << std::endl;
    result = -1;
   }
  }
  else
  {
   std::cerr << "Couldn't connect to service" << std::endl;
   result = -1;
  }
       
 }
 CoUninitialize();

 return result;
}

 

使用C++进行WMI查询的简单封装

封装WMI查询的简单类CWMIUtil 头文件WMIUtil.h #pragma once #include class CWMIUtil { public: CWMIUtil(...
  • mkdym
  • mkdym
  • 2013年04月05日 12:33
  • 1583

WMI技术介绍和应用——执行方法

本文主要介绍如何使用WMI执行方法。
  • breaksoftware
  • breaksoftware
  • 2016年01月21日 20:20
  • 2333

vc使用wmi例子

#define _WIN32_DCOM #define _WIN32_WINNT 0X0500 #include #include #include #include "wbemidl....
  • jiftlixu
  • jiftlixu
  • 2012年04月18日 15:31
  • 3164

WMI 的一个实现

WMI 的一个实现作者:Paul Li翻译:Abbey原文出处:Code Project:Windows Management Instrumentation (WMI) Implementation...
  • i_like_cpp
  • i_like_cpp
  • 2005年06月05日 00:08
  • 1362

VC调用WMI框架

微软MSDN的一个例子 在vc6下编译测试通过 #include //用到了CString 的 BSTR转ANSI #define _WIN32_DCOM //这个不懂 //vc6的bug.所...
  • wangjieest
  • wangjieest
  • 2012年03月05日 13:42
  • 4020

使用WIN系统自带wmi测试工具查询杀毒软件信息

1.在“运行”中,输入“wbemtest.exe”  2.单击“连接”,在输入框中输入ROOT\\SecurityCenter2 3.点击“枚举类别”,选择“递归” 4.点击“查询”,在输入框中输入...
  • nui111
  • nui111
  • 2015年03月03日 11:21
  • 1549

【WMI】WMI For C++/COM 获取系统信息过程

使用WMI获取系统信息过程我们以获取本机系统为例,获取系统信息的过程如下:1)初始化COM库        由于用C++编写WMI应用是基于COM技术的,所以必须初始化COM库,这时调用函数CoIni...
  • Xscarlet
  • Xscarlet
  • 2007年08月22日 21:30
  • 4689

学习笔记 -- 使用WMI获得系统信息

学习笔记 -- 使用WMI获得系统信息WMI是Windows 2K/XP管理系统的核心。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model ...
  • Flood1984
  • Flood1984
  • 2007年12月03日 15:25
  • 3627

WMI获取系统信息 得到product name

利用WMI获取系统信息, 一般步骤: 1. 通过调用CoInitialzeEx来初始化COM参数. 2. 通过调用CoInitializeSecurity来初始化COM过程安全. ...
  • liyun123gx
  • liyun123gx
  • 2014年02月12日 17:47
  • 829

wdm/wmi调用与实现

1.  文档说明 本文重点介绍了WMI的客户端实现方法和驱动程序Provider的在多路径设备相关驱动中的实现方法。   2.  WMI简介 WMI(Windows  Management ...
  • eric_zl_zhang
  • eric_zl_zhang
  • 2011年08月29日 10:27
  • 4863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++代码调用WMI 得到机器Model name.
举报原因:
原因补充:

(最多只允许输入30个字)