要了解WMI,请查阅:
http://www.microsoft.com/china/technet/community/scriptcenter/resources/wmifaq.mspx#EJC 。
WMI是一组COM对象,其接口比较多,详细请参考:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/com_api_for_wmi.asp
WMI的使用平台包括:NT sp4/2000/XP/2003,98可能需要另外安装。一些软件,如优化大师,就是通过该技术获取到本机所有硬件信息。
MSDN上有使用范例:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/ example__getting_wmi_data_from_the_local_computer.asp
要获取硬件信息的步骤:
1、 所需头文件,库
#include <wbemidl.h>
#include <Wbemcli.h>
#pragma comment(lib,"Wbemuuid.lib")
2、初始化 COM 接口:
访问 WMI, 必须先初始化 COM 接口, 在程序的一开始调用 CoInitialize(NULL); 初始化, 在结束时调用 CoUninitialize(); 释放资源。
3、获取访问 WMI 权限:
CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
如果这个函数返回 S_OK 获取权限成功, 否则为失败。
4、通过 IWbemLocator 和 IWbemServices 这两个 COM 接口访问 WMI, 获取系统信息:
我整理的完整代码:
LRESULT _getWmiInfo(IWbemClassObject *pClassObject)
{
SAFEARRAY *pvNames = NULL;
if( pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS |
WBEM_MASK_CONDITION_ORIGIN, NULL, &pvNames) == S_OK )