Mit WMI Prozessortemperatur auslesen



  • Hallo,
    ich suche nach einer Möglichkeit, auf verschiedenen (Windows XP-) Systemen die Temperatur des Prozessors auszulesen.
    Ich glaube, die einzige Möglichkeit dazu ist WMI.
    Soweit ich weiss, liegen die Daten in MSAcpi_ThermalZoneTemperature / CurrentTemperature als Kelvin * 10 vor. (Umrechnung wäre also CurrentTemperature / 10 - 273.15)

    Nach der Initialisierung von WMI soll nun die Temperatur ausgelesen werden. Ich habe einige Beispiele für WMI im Internet gefunden, u.a. dieses hier:

    HRESULT hres;
    
        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)) {
            UnInitialize();
            return false;
        } 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);
    			std::wcout << "Process Name : " << vtProp.bstrVal << std::endl;
                VariantClear(&vtProp);
    		}
    		return true;
        }
    

    Wenn ich jetzt "SELECT * FROM Win32_Process" durch "SELECT * FROM MSAcpi_ThermalZoneTemperature" und "Name" durch "CurrentTemperature" ersetze, müsste es ja gehen,
    aber dann ist uReturn immer 0..
    MfG,
    Max



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die meinsten Hauptplatinen unterstützen dieses Feature nicht, deshalb wirst Du damit wohl kaum Glück haben...

    PS: Das richtigere wäre vermutlich Win32_TemperatureProbe



  • Hallo,
    ich habe den Fehler jetzt:
    ich hatte mich nach ROOT\CIMV2 verbunden (wegen Win32_Process), richtig ist ROOT\WMI; dann gibt es auch MSAcpi_ThermalZoneTemperature.. 😃

    @Jochen Kalmbach:
    Damit habe ich es auch schon probiert, aber da bekomme ich nichts zurück..
    Bei MSAcpi_ThermalZoneTemperature.CurrentTemperature geht es jetzt, daher verwende ich jetzt das, da ich das Prog sowieso eigtl. nur für mich verwende Aber trotzdem danke für die Antwort!


Anmelden zum Antworten