it-swarm.com.de

Überwachung der CPU-Temperatur

Für ein Programmierprojekt möchte ich auf die Temperaturwerte meiner CPU und GPUs zugreifen. Ich werde C # verwenden. In verschiedenen Foren habe ich den Eindruck, dass es spezifische Informationen und Entwicklerressourcen gibt, die Sie benötigen, um auf diese Informationen für verschiedene Boards zugreifen zu können. Ich habe eine MSI NF750-G55-Karte. Die Website von MSI enthält keine Informationen, nach denen ich suche. Ich habe ihren technischen Support ausprobiert und der Vertreter, mit dem ich gesprochen habe, gab an, dass sie keine derartigen Informationen haben. Es muss einen Weg geben, diese Informationen zu erhalten.

Irgendwelche Gedanken?

22
Paul

Zumindest für die CPU-Seite könnten Sie WMI verwenden.

Der Namespace\object ist root\WMI, MSAcpi_ThermalZoneTemperature

Beispielcode:

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("root\\WMI",
                                 "SELECT * FROM MSAcpi_ThermalZoneTemperature");

ManagementObjectCollection collection = 
    searcher.Get();

foreach(ManagementBaseObject tempObject in collection)
{
    Console.WriteLine(tempObject["CurrentTemperature"].ToString());
}

Das gibt Ihnen die Temperatur in einem Rohformat. Sie müssen von dort aus konvertieren:

kelvin = raw / 10;

celsius = (raw / 10) - 273.15;

Fahrenheit = ((raw / 10) - 273.15) * 9 / 5 + 32;
20
Justin Niessner

Tatsächlich ist der beste Weg für jede hardwarebezogene Codierung mit WMI am besten, indem dieses WMI Code Creator-Tool von Microsoft verwendet wird. Das Tool erstellt den Code für Sie basierend auf dem, wonach Sie suchen welche .Net-Sprache Sie verwenden möchten.

Die derzeit unterstützten Sprachen sind: C #, Visual Basic, VB Script.

1
Ashraf Abusada

Beachten Sie, dass MSAcpi_ThermalZoneTemperature Ihnen nicht die Temperatur der CPU, sondern die Temperatur der Hauptplatine angibt. Beachten Sie auch, dass die meisten Motherboards dies nicht über WMI implementieren.

Sie können den Open Hardware Monitor ausprobieren, obwohl die neuesten Prozessoren nicht unterstützt werden.

internal sealed class CpuTemperatureReader : IDisposable
{
    private readonly Computer _computer;

    public CpuTemperatureReader()
    {
        _computer = new Computer { CPUEnabled = true };
        _computer.Open();
    }

    public IReadOnlyDictionary<string, float> GetTemperaturesInCelsius()
    {
        var coreAndTemperature = new Dictionary<string, float>();

        foreach (var hardware in _computer.Hardware)
        {
            hardware.Update(); //use hardware.Name to get CPU model
            foreach (var sensor in hardware.Sensors)
            {
                if (sensor.SensorType == SensorType.Temperature && sensor.Value.HasValue)
                    coreAndTemperature.Add(sensor.Name, sensor.Value.Value);
            }
        }

        return coreAndTemperature;
    }

    public void Dispose()
    {
        try
        {
            _computer.Close();
        }
        catch (Exception)
        {
            //ignore closing errors
        }
    }
}

Laden Sie die ZIP-Datei aus der offiziellen Quelle herunter, extrahieren Sie sie und fügen Sie in Ihrem Projekt einen Verweis auf OpenHardwareMonitorLib.dll hinzu.

0
Ali Zahid