Мониторинг температуры процессора
Для программирования проекта я хотел бы получить доступ к показаниям температуры от моего процессора и графических процессоров. Я буду использовать C#. На разных форумах складывается впечатление, что для доступа к этой информации для различных форумов вам нужна конкретная информация и ресурсы для разработчиков. У меня есть плата MSI NF750-G55. На сайте MSI нет информации, которую я ищу. Я попробовал их техническую поддержку, и представитель, с которым я говорил, заявил, что у них нет такой информации. Должен быть способ получить эту информацию.
Какие-нибудь мысли?
3 ответа
По крайней мере, на стороне процессора, вы можете использовать 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;
На самом деле лучший способ сделать любое аппаратное кодирование с использованием WMI лучше всего сделать с помощью этого инструмента WMI Code Creator от Microsoft, который создаст для вас код на основе того, что вы ищете, и на каком языке.Net вы хотите использовать.
В настоящее время поддерживаются следующие языки: C#, Visual Basic, VB Script.
Обратите внимание, что 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 в ваш проект.