Holen Sie sich die CPU-Temperatur

Möchte ich, um die CPU-Temperatur.
Unten ist das, was ich getan habe mit C++ und WMI. Ich lese MSAcpi_ThermalZoneTemperature, aber es ist immer das gleiche und es ist nicht die CPU-Temperatur überhaupt.

Gibt es eine Möglichkeit, um die Reale Temperatur der CPU, ohne zu schreiben, Treiber? Oder gibt es irgendwelche Bibliotheken, die ich benutzen kann? Vielen Dank im Voraus.

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>

#pragma comment(lib, "wbemuuid.lib")

HRESULT GetCpuTemperature(LPLONG pTemperature)
{
        if (pTemperature == NULL)
                return E_INVALIDARG;

        *pTemperature = -1;
        HRESULT ci = CoInitialize(NULL);
        HRESULT hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
        if (SUCCEEDED(hr))
        {
                IWbemLocator *pLocator;
                hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLocator);
                if (SUCCEEDED(hr))
                {
                        IWbemServices *pServices;
                        BSTR ns = SysAllocString(L"root\\WMI");
                        hr = pLocator->ConnectServer(ns, NULL, NULL, NULL, 0, NULL, NULL, &pServices);
                        pLocator->Release();
                        SysFreeString(ns);
                        if (SUCCEEDED(hr))
                        {
                                BSTR query = SysAllocString(L"SELECT * FROM MSAcpi_ThermalZoneTemperature");
                                BSTR wql = SysAllocString(L"WQL");
                                IEnumWbemClassObject *pEnum;
                                hr = pServices->ExecQuery(wql, query, WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY, NULL, &pEnum);
                                SysFreeString(wql);
                                SysFreeString(query);
                                pServices->Release();
                                if (SUCCEEDED(hr))
                                {
                                        IWbemClassObject *pObject;
                                        ULONG returned;
                                        hr = pEnum->Next(WBEM_INFINITE, 1, &pObject, &returned);
                                        pEnum->Release();
                                        if (SUCCEEDED(hr))
                                        {
                                                BSTR temp = SysAllocString(L"CurrentTemperature");
                                                VARIANT v;
                                                VariantInit(&v);
                                                hr = pObject->Get(temp, 0, &v, NULL, NULL);
                                                pObject->Release();
                                                SysFreeString(temp);
                                                if (SUCCEEDED(hr))
                                                {
                                                        *pTemperature = V_I4(&v);
                                                }
                                                VariantClear(&v);
                                        }
                                }
                        }
                        if (ci == S_OK)
                        {
                                CoUninitialize();
                        }
                }
        }
        return hr;
}

int main(int argc, char **argv)
{
        LONG temp;
        GetCpuTemperature(&temp);
        printf("temp=%lf\n", ((double)temp / 10 - 273.15));
        getc(stdin);
        return 0;
}
Wussten Sie, vergleichen Sie Ihre Temperatur mit jedem monitoring-software (superuser.com/a/395437/15484)? Was ist mit Kelvin-Celsius-Umwandlung? (PS: Sie können die Wiederverwendung Treiber von RealTemp oder andere Projekt)
Ich mache die Konvertierung (temp / 10 - 273.15) aber das Ergebnis ist immer 70.05 und Core Temp zeigt die verschiedenen Temperaturen.
Haben Sie getroffen, einen Blick auf openhardwaremonitor.org ?
Mögliche Duplikate von Wie man die CPU-Temperatur?
kein Duplikat, denn diese Frage ist definitiv, es zu tun über Windows-API, während die, die Sie link ist, es zu tun via managed code.

InformationsquelleAutor Johnny Mnemonic | 2014-04-26

Schreibe einen Kommentar