Обратите внимание, что 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 в свой проект.