您的位置:首页 > 编程语言 > C语言/C++

【C++】WMI获取系统硬件信息(CPU/DISK/NetWork etc)

2016-12-09 15:47 666 查看
官网找到一个例子,根据例子修改下可以获取很多信息

原文链接:http://blog.csdn.net/u010352603/article/details/51400769

[cpp] view
plain copy 





#define _WIN32_DCOM  

#include <iostream>  

using namespace std;  

#include <comdef.h>  

#include <Wbemidl.h>  

  

#pragma comment(lib, "wbemuuid.lib")  

  

int main(int argc, char **argv)  

{  

    HRESULT hres;  

  

    // Step 1: --------------------------------------------------  

    // Initialize COM. ------------------------------------------  

  

    hres =  CoInitializeEx(0, COINIT_MULTITHREADED);   

    if (FAILED(hres))  

    {  

        cout << "Failed to initialize COM library. Error code = 0x"   

            << hex << hres << endl;  

        return 1;                  // Program has failed.  

    }  

  

    // Step 2: --------------------------------------------------  

    // Set general COM security levels --------------------------  

  

    hres =  CoInitializeSecurity(  

        NULL,   

        -1,                          // COM authentication  

        NULL,                        // Authentication services  

        NULL,                        // Reserved  

        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication   

        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation    

        NULL,                        // Authentication info  

        EOAC_NONE,                   // Additional capabilities   

        NULL                         // Reserved  

        );  

  

                        

    if (FAILED(hres))  

    {  

        cout << "Failed to initialize security. Error code = 0x"   

            << hex << hres << endl;  

        CoUninitialize();  

        return 1;                    // Program has failed.  

    }  

      

    // Step 3: ---------------------------------------------------  

    // Obtain the initial locator to WMI -------------------------  

  

    IWbemLocator *pLoc = NULL;  

  

    hres = CoCreateInstance(  

        CLSID_WbemLocator,               

        0,   

        CLSCTX_INPROC_SERVER,   

        IID_IWbemLocator, (LPVOID *) &pLoc);  

   

    if (FAILED(hres))  

    {  

        cout << "Failed to create IWbemLocator object."  

            << " Err code = 0x"  

            << hex << hres << endl;  

        CoUninitialize();  

        return 1;                 // Program has failed.  

    }  

  

    // Step 4: -----------------------------------------------------  

    // Connect to WMI through the IWbemLocator::ConnectServer method  

  

    IWbemServices *pSvc = NULL;  

   

    // Connect to the root\cimv2 namespace with  

    // the current user and obtain pointer pSvc  

    // to make IWbemServices calls.  

    hres = pLoc->ConnectServer(  

         _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace  

         NULL,                    // User name. NULL = current user  

         NULL,                    // User password. NULL = current  

         0,                       // Locale. NULL indicates current  

         NULL,                    // Security flags.  

         0,                       // Authority (for example, Kerberos)  

         0,                       // Context object   

         &pSvc                    // pointer to IWbemServices proxy  

         );  

      

    if (FAILED(hres))  

    {  

        cout << "Could not connect. Error code = 0x"   

             << hex << hres << endl;  

        pLoc->Release();       

        CoUninitialize();  

        return 1;                // Program has failed.  

    }  

  

    cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;  

  

  

    // Step 5: --------------------------------------------------  

    // Set security levels on the proxy -------------------------  

  

    hres = CoSetProxyBlanket(  

       pSvc,                        // Indicates the proxy to set  

       RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx  

       RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx  

       NULL,                        // Server principal name   

       RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx   

       RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx  

       NULL,                        // client identity  

       EOAC_NONE                    // proxy capabilities   

    );  

  

    if (FAILED(hres))  

    {  

        cout << "Could not set proxy blanket. Error code = 0x"   

            << hex << hres << endl;  

        pSvc->Release();  

        pLoc->Release();       

        CoUninitialize();  

        return 1;               // Program has failed.  

    }  

  

    // Step 6: --------------------------------------------------  

    // Use the IWbemServices pointer to make requests of WMI ----  

  

    // For example, get the name of the operating system  

    IEnumWbemClassObject* pEnumerator = NULL;  

    hres = pSvc->ExecQuery(  

        bstr_t("WQL"),   

        bstr_t("SELECT * FROM Win32_OperatingSystem"),  

        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,   

        NULL,  

        &pEnumerator);  

      

    if (FAILED(hres))  

    {  

        cout << "Query for operating system name failed."  

            << " Error code = 0x"   

            << hex << hres << endl;  

        pSvc->Release();  

        pLoc->Release();  

        CoUninitialize();  

        return 1;               // Program has failed.  

    }  

  

    // Step 7: -------------------------------------------------  

    // Get the data from the query in step 6 -------------------  

   

    IWbemClassObject *pclsObj = NULL;  

    ULONG uReturn = 0;  

     

    while (pEnumerator)  

    {  

        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,   

            &pclsObj, &uReturn);  

  

        if(0 == uReturn)  

        {  

            break;  

        }  

  

        VARIANT vtProp;  

  

        // Get the value of the Name property  

        hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);  

        wcout << " OS Name : " << vtProp.bstrVal << endl;  

        VariantClear(&vtProp);  

  

        pclsObj->Release();  

    }  

  

    // Cleanup  

    // ========  

      

    pSvc->Release();  

    pLoc->Release();  

    pEnumerator->Release();  

    CoUninitialize();  

  

    return 0;   // Program successfully completed.  

   

}  

下面列出了常用信息的类:

Win32_Processor                        // CPU 处理器
Win32_PhysicalMemory                   // 物理内存
Win32_Keyboard                         // 键盘
Win32_PointingDevice                   // 点输入设备,如鼠标
Win32_DiskDrive                        // 硬盘驱动器
Win32_CDROMDrive                       // 光盘驱动器
Win32_BaseBoard                        // 主板
Win32_BIOS                             // BIOS 芯片
Win32_ParallelPort                     // 并口
Win32_SerialPort                       // 串口
Win32_SoundDevice                      // 多媒体设置
Win32_USBController                    // USB 控制器
Win32_NetworkAdapter                   // 网络适配器
Win32_NetworkAdapterConfiguration      // 网络适配器设置
Win32_Printer                          // 打印机
Win32_PrinterConfiguration             // 打印机设置
Win32_PrintJob                         // 打印机任务
Win32_TCPIPPrinterPort                 // 打印机端口
Win32_POTSModem                        // MODEM
Win32_POTSModemToSerialPort            // MODEM 端口
Win32_DesktopMonitor                   // 显示器
Win32_VideoController                  // 显卡细节。
Win32_VideoSettings                    // 显卡支持的显示模式。
Win32_TimeZone                         // 时区
Win32_SystemDriver                     // 驱动程序
Win32_DiskPartition                    // 磁盘分区
Win32_LogicalDisk                      // 逻辑磁盘
Win32_LogicalMemoryConfiguration       // 逻辑内存配置
Win32_PageFile                         // 系统页文件信息
Win32_PageFileSetting                  // 页文件设置
Win32_BootConfiguration                // 系统启动配置
Win32_OperatingSystem                  // 操作系统信息
Win32_StartupCommand                   // 系统自动启动程序
Win32_Service                          // 系统安装的服务
Win32_Group                            // 系统管理组
Win32_GroupUser                        // 系统组帐号
Win32_UserAccount                      // 用户帐号
Win32_Process                          // 系统进程
Win32_Thread                           // 系统线程
Win32_Share                            // 共享
Win32_NetworkClient                    // 已安装的网络客户端
Win32_NetworkProtocol                  // 已安装的网络协议
MSDN官网关于WMI的demo程序
MSDN官网关于WMI定义的所有类信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: