WMI Programmierung



  • Hallo,

    es gibt ja unter
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/example_creating_a_wmi_application.asp
    ein Beispiel wie man mit den WMI-Klassen umgehen muss.
    Allerdings steige ich dort nicht so ganz durch, was genau muss ich dort noch ändern um die Win32_NetworkAdapter http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_networkadapter.asp nutzen zu können? Wie kann ich damit jetzt geziehlt auf die Werte zurgreifen?

    Vielen Dank.



  • hast du nicht vor ein paar tagen das selbe gefragt 😕
    zeige doch mal deinen ansatz.



  • Mein Ansatz ist das Beispiel von der msdn.
    Ich habe überhaupt keine Ahnung wo ich da jetzt ansetzen muss 😢



  • Mit dem Beispiel-Code von -King-, auf den ich dich schon mehrfach verwiesen hatte, solltest du eigentlich in der Lage sein, die gewünschten Werte auszulesen:

    -King- schrieb:

    // wbemuuid.lib nicht vergessen!
    #include <windows.h>
    #include <tchar.h>
    #include <wbemdisp.h>
    
    VOID ProcessorId(ISWbemObject* pObject)
    {
        ISWbemPropertySet* pPropSet = NULL;
    
        if(SUCCEEDED(pObject->get_Properties_(&pPropSet)))
        {
            ISWbemProperty* pProp = NULL;
            BSTR bstrName = SysAllocString(L"ProcessorId");
    
            if(SUCCEEDED(pPropSet->Item(bstrName, 0, &pProp)))
            {
                VARIANT varValue;
                VariantInit(&varValue);
    
                if(SUCCEEDED(pProp->get_Value(&varValue)))
                {
                    if(SUCCEEDED(VariantChangeType(&varValue, &varValue, 0, VT_BSTR)))
                    {
                        MessageBoxW(NULL, V_BSTR(&varValue), L"ProcessorId", MB_OK);
                    }
                }
               
                VariantClear(&varValue);
                pProp->Release();
            }
    
            SysFreeString(bstrName);
            pPropSet->Release();
        }
    
        return;
    }
    
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
      ISWbemObjectSet* pObjectSet = NULL;
      ISWbemServices*  pServices  = NULL;
      ISWbemObject*    pObject    = NULL;
      IEnumVARIANT*    pEnumObj   = NULL;
      IUnknown*        pUnk       = NULL;
      VARIANT          varItem;
      HRESULT          hr;
      BSTR             bstrClass, bstrName;
    
        CoInitialize(NULL);
    
        if(SUCCEEDED(CoGetObject(OLESTR("winmgmts:"), NULL, IID_ISWbemServices, (void**)&pServices)))
        {
            bstrClass = SysAllocString(OLESTR("Win32_Processor"));
                       
            if(SUCCEEDED(pServices->InstancesOf(bstrClass, 0, NULL, &pObjectSet)))
            {
                if(SUCCEEDED(pObjectSet->get__NewEnum(&pUnk)))
                {
                    if(SUCCEEDED(pUnk->QueryInterface(IID_IEnumVARIANT, (void**)&pEnumObj)))
                    {
                        while(S_OK == pEnumObj->Next(1, &varItem, NULL))
                        {
                            if(FAILED(VariantChangeType(&varItem, &varItem, 0, VT_UNKNOWN)))
                            {
                                VariantClear(&varItem);
                                continue;
                            }
    
                            pObject = NULL;                        
                            hr = V_UNKNOWN(&varItem)->QueryInterface(IID_ISWbemObject, (void**)&pObject);
                            VariantClear(&varItem);
    
    						ProcessorId(pObject);
    
                            if(FAILED(hr))
                                continue;
    
                            bstrName = NULL;
                            pObject->GetObjectText_(0, &bstrName);
    
                            MessageBoxW(NULL, bstrName, L"Processor Info", MB_OK);
    
                            SysFreeString(bstrName);
                            pObject->Release();
                        }
                        pEnumObj->Release();
                    }
                    pUnk->Release();
                }
                pObjectSet->Release();
            }
            SysFreeString(bstrClass);
            pServices->Release();
        }
    
        CoUninitialize();
        return(0);
    }
    

    Wichtig ist auch der Kommentar in der ersten Zeile - WbemUuid.Lib mitlinken (bei mir funktionierte das Ganze aber nur im Release-Modus)


Anmelden zum Antworten