Мониторинг температуры процессора - PullRequest
22 голосов
/ 27 мая 2010

Для проекта программирования я хотел бы получить доступ к показаниям температуры от моего процессора и графических процессоров. Я буду использовать C #. На разных форумах создается впечатление, что для доступа к этой информации для различных форумов вам нужна конкретная информация и ресурсы для разработчиков. У меня есть плата MSI NF750-G55. На сайте MSI нет информации, которую я ищу. Я попробовал их техническую поддержку, и представитель, с которым я говорил, заявил, что у них нет такой информации. Должен быть способ получить эту информацию.

Есть мысли?

Ответы [ 3 ]

20 голосов
/ 27 мая 2010

По крайней мере, на стороне процессора, вы можете использовать WMI.

Пространство имен \ объект root\WMI, MSAcpi_ThermalZoneTemperature

Пример кода:

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

ManagementObjectCollection collection = 
    searcher.Get();

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

Это даст вам температуру в необработанном формате. Вы должны конвертировать оттуда:

kelvin = raw / 10;

celsius = (raw / 10) - 273.15;

fahrenheit = ((raw / 10) - 273.15) * 9 / 5 + 32;
1 голос
/ 05 августа 2016

На самом деле лучший способ сделать любое аппаратное кодирование с использованием WMI лучше всего сделать с помощью этого инструмента WMI Code Creator из Microsoft , инструмент создаст код для вас на основе того, что Вы ищете и какой язык .Net вы хотите использовать.

В настоящее время поддерживаются следующие языки: C #, Visual Basic, VB Script.

0 голосов
/ 08 августа 2018

Обратите внимание, что MSAcpi_ThermalZoneTemperature показывает не температуру процессора, а температуру материнской платы. Также обратите внимание, что большинство материнских плат не реализуют это через WMI.

Вы можете попробовать Open Hardware Monitor, хотя ему не хватает поддержки новейших процессоров.

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
        }
    }
}

Загрузите zip из официального источника , извлеките и добавьте ссылку на OpenHardwareMonitorLib.dll в свой проект.

...