我现在只有C#的。

解决方案 »

  1.   

    http://www.codeproject.com/KB/system/Using_WMI_in_Visual_C__.aspx?display=PrintAll&fid=31435&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=1699353&fr=26
      

  2.   

    msdn有例子 http://msdn.microsoft.com/en-us/library/aa390418(VS.85).aspx
    #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;    // 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.
        }    // Initialize 
        hres =  CoInitializeSecurity(
            NULL,     
            -1,      // COM negotiates service                  
            NULL,    // Authentication services
            NULL,    // Reserved
            RPC_C_AUTHN_LEVEL_DEFAULT,    // authentication
            RPC_C_IMP_LEVEL_IMPERSONATE,  // 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.
        }    // Obtain the initial locator to Windows Management
        // on a particular host computer.
        IWbemLocator *pLoc = 0;    hres = CoCreateInstance(
            CLSID_WbemLocator,             
            0, 
            CLSCTX_INPROC_SERVER, 
            IID_IWbemLocator, (LPVOID *) &pLoc);
     
        if (FAILED(hres))
        {
            cout << "Failed to create IWbemLocator object. "
                << "Error code = 0x"
                << hex << hres << endl;
            CoUninitialize();
            return 1;       // Program has failed.
        }    IWbemServices *pSvc = 0;    // 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"), // WMI namespace
            NULL,                    // User name
            NULL,                    // User password
            0,                       // Locale
            NULL,                    // Security flags                 
            0,                       // Authority       
            0,                       // Context object
            &pSvc                    // 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;    // Set the IWbemServices proxy so that impersonation
        // of the user (client) occurs.
        hres = CoSetProxyBlanket(
           
           pSvc,                         // the proxy to set
           RPC_C_AUTHN_WINNT,            // authentication service
           RPC_C_AUTHZ_NONE,             // authorization service
           NULL,                         // Server principal name
           RPC_C_AUTHN_LEVEL_CALL,       // authentication level
           RPC_C_IMP_LEVEL_IMPERSONATE,  // impersonation level
           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.
        }
        // Use the IWbemServices pointer to make requests of WMI. 
        // Make requests here:    // For example, query for all the running processes
        IEnumWbemClassObject* pEnumerator = NULL;
        hres = pSvc->ExecQuery(
            bstr_t("WQL"), 
            bstr_t("SELECT * FROM Win32_Process"),
            WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
            NULL,
            &pEnumerator);
        
        if (FAILED(hres))
        {
            cout << "Query for processes failed. "
                 << "Error code = 0x" 
                 << hex << hres << endl;
            pSvc->Release();
            pLoc->Release();     
            CoUninitialize();
            return 1;               // Program has failed.
        }
        else
        { 
            IWbemClassObject *pclsObj;
            ULONG uReturn = 0;
       
            while (pEnumerator)
            {
                hres = pEnumerator->Next(WBEM_INFINITE, 1, 
                    &pclsObj, &uReturn);            if(0 == uReturn)
                {
                    break;
                }            VARIANT vtProp;            // Get the value of the Name property
                hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
                wcout << "Process Name : " << vtProp.bstrVal << endl;
                VariantClear(&vtProp);
            }
             
        }
     
        // Cleanup
        // ========    pSvc->Release();
        pLoc->Release();     
        CoUninitialize();    return 0;   // Program successfully completed.
    }
      

  3.   

    fatal error C1083: Cannot open include file: 'wbemidl.h' 怎么办啊。在线等、、、、
      

  4.   

    是不是vc的版本太低,sdk需要升级
      

  5.   

    vc6的sdk版本太低了,最好下一个sdk,更新一下
      

  6.   

    请问用WMI能取硬件详细信息吗?比如内存或硬盘制造商、转速等。
      

  7.   

    请高人指教。
       Win32_CacheMemory 
          Win32_CDROMDrive 
          Win32_CurrentProbe 哪位高人对这些有研究的给我来一份吧。
      

  8.   

    顶啊。来高人啊。class Win32_MemoryDevice : Win32_SMBIOSMemory
    {
      uint16 Access;
      uint8 AdditionalErrorData[];
      uint16 Availability;
      uint64 BlockSize;
      string Caption;
      uint32 ConfigManagerErrorCode;
      boolean ConfigManagerUserConfig;
      boolean CorrectableError;
      string CreationClassName;
      string Description;
      string DeviceID;
      uint64 EndingAddress;
      uint16 ErrorAccess;
      uint64 ErrorAddress;
      boolean ErrorCleared;
      uint8 ErrorData[];
      uint16 ErrorDataOrder;
      string ErrorDescription;
      uint16 ErrorGranularity;
      uint16 ErrorInfo;
      string ErrorMethodology;
      uint64 ErrorResolution;
      datetime ErrorTime;
      uint32 ErrorTransferSize;
      datetime InstallDate;
      uint32 LastErrorCode;
      string Name;
      uint64 NumberOfBlocks;
      string OtherErrorDescription;
      string PNPDeviceID;
      uint16 PowerManagementCapabilities[];
      boolean PowerManagementSupported;
      string Purpose;
      uint64 StartingAddress;
      string Status;
      uint16 StatusInfo;
      string SystemCreationClassName;
      boolean SystemLevelAddress;
      string SystemName;
    };如上,内存属性,没有制造商的属性,那怎么取制造商呢?
      

  9.   


    呵呵,谁高人啊。我是叫高人帮我看看啊。上面class Win32_MemoryDevice : Win32_SMBIOSMemory 这是CSDN的。