CPU Temp auslesen



  • Hallo

    Ich versuche gerade die CPU Temp mit Hilfe von WMI in meiner MFC App auszulesen.
    Leider bricht er aber immer in folgender Zeile ab d.h. der returnwert ist -2191454919 oder so ähnlich, also nicht S_OK (pClassObject ist NULL danach)

    hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
    

    Hier ist der komplette Code den ich benutze:

    void CFFMpeg_guiDlg::ReadCPUTemp ()
    {
      HRESULT hr = CoInitializeEx (0, COINIT_MULTITHREADED); 
      if (FAILED (hr)) 
      {
        return;
      }
    
      IWbemLocator* pIWbemLocator = NULL;
      IWbemServices* pWbemServices = NULL;
      IEnumWbemClassObject* pEnumObject = NULL;
    
      if (CoCreateInstance (CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pIWbemLocator) != S_OK)
        return;
    
      if (pIWbemLocator->ConnectServer ( CComBSTR (L"ROOT\\WMI"), NULL, NULL, 0, NULL, 0, 0, &pWbemServices) != S_OK)
        return;
    
      HRESULT hRes;
      hRes = pWbemServices->ExecQuery (CComBSTR (L"WQL"), CComBSTR (L"SELECT * FROM MSAcpi_ThermalZoneTemperature"),WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumObject); 
      if (hRes != S_OK)
      {
        return;
      }
    
      hRes = pEnumObject->Reset();
      if (hRes != S_OK)
      {
        return;
      }
    
      ULONG uCount = 1, uReturned;
      IWbemClassObject* pClassObject;
    -->  hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
      if(hRes != S_OK)
      {
        return;
      }
    
      VARIANT v;
      int i = 0;
      BSTR strClassProp = SysAllocString(L"CurrentTemperature");
      hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);
      if (hRes != S_OK)
      {
        MessageBox("Could not Get Value");
        return;
      }
    
      SysFreeString(strClassProp);
    //   _bstr_t bstrpath = &v; //just to convert bstr to ansi
    //   char* strpath=(char*)bstrpath;
    // 
    //   if (succeeded(hres))
    //     messagebox(strpath);
    //   else
    //     messagebox("error in getting object");
    
      VariantClear(&v);
      pIWbemLocator->Release();
      pWbemServices->Release();
      pEnumObject->Release();
      pClassObject->Release();
      CoUninitialize();
    }
    

    Wäre für ein paar Tips dankbar
    mfg
    Erich


Anmelden zum Antworten