CPU温度监控

对于编程项目,我想访问CPU和GPU的温度读数。 我将使用C#。 在各种论坛中,我得到的印象是,您需要特定的信息和开发人员资源才能访问各种电路板的信息。 我有一个MSI NF750-G55主板。 MSI的网站没有我要查找的任何信息。 我尝试了他们的技术支持,我与之交谈的代表说他们没有任何此类信息。 必须有办法获得该信息。

有什么想法吗?

至少在CPU方面,您可以使用WMI。

namespace \ object是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进行任何硬件相关编码的最佳方法最好通过使用Microsoft的WMI Code Creator工具来完成,该工具将根据您要查找的内容和您要使用的.Net语言为您创建代码。

目前支持的语言是:C#,Visual Basic,VB Script。

请注意, MSAcpi_ThermalZoneTemperature不会提供CPU的温度,而是主板的温度。 另请注意,大多数主板都没有通过WMI实现此function。

虽然它缺乏对最新处理器的支持,但你可以给开放硬件监视器一个机会。

 internal sealed class CpuTemperatureReader : IDisposable { private readonly Computer _computer; public CpuTemperatureReader() { _computer = new Computer { CPUEnabled = true }; _computer.Open(); } public IReadOnlyDictionary GetTemperaturesInCelsius() { var coreAndTemperature = new Dictionary(); 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的引用。