H
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