WMI Win32_Processor



  • Hallo,

    Ich habe hier ein beispiel gefunden zu Win32_Processor und wollte frage wie ich die einzelnen Klassen-Variablen auslesen kann.

    // wbemuuid.lib nicht vergessen!
    #include <windows.h>
    #include <tchar.h>
    #include <wbemdisp.h>
    
    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);
    
                            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);
    }
    

    Danke!



  • Hallo, ich habe eine Klasse gebastelt:

    //get: BSTR value = prozessor.Property(L"Architecture");
    //set: prozessor.Property(L"Architecture", L"blah");
    BSTR CSWbemObject::Property(WCHAR *prop, WCHAR *value=NULL)
    {
    	BSTR rprop = 0;
    	ISWbemPropertySet*  pPropSet    = NULL;
    	ISWbemProperty*     pProp       = NULL;
    	HRESULT             hr;
    	VARIANT v;
    
    	if (m_objWbemObject) // ISWbemObject*
    	{
    		if(!m_objWbemObject->get_Properties_(&pPropSet))
    		{
    			v.vt = VT_EMPTY;
    			BSTR bstrProperty = SysAllocString(prop);
    			hr = pPropSet->Item(bstrProperty, 0, &pProp);
    
    			SysFreeString(bstrProperty);
    			pPropSet->Release();
    
    			if(!hr)
    			{
    				if (!value) // get
    				{
    					hr = pProp->get_Value(&v);
    					pProp->Release();
    					if (!hr)
    					{
    						if (!VariantChangeType(&v, &v, 0, VT_BSTR))
    						{
    							rprop = v.bstrVal;
    						}
    						else VariantClear(&v);
    					}
    				}
    				else // put
    				{
    					v.vt = VT_BSTR;
    					v.bstrVal = SysAllocString(value);
    					pProp->put_Value(&v);
    					VariantClear(&v);
    				}
    			}
    		}
    	}
    	return rprop;
    }
    

Anmelden zum Antworten