CPU温度监控

Posted

技术标签:

【中文标题】CPU温度监控【英文标题】:CPU temperature monitoring 【发布时间】:2011-02-24 19:45:26 【问题描述】:

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

有什么想法吗?

【问题讨论】:

geekswithblogs.net/cicorias/archive/2006/11/22/97855.aspx 有一个不错的示例项目,可以帮助您入门。包含解决方案和所有来源的 zip 文件的直接链接:cicoria.com/downloads/TemperatureMonitor/TempMonitorSrc.zip 使用 Justin Niessner 的解决方案很多人得到了 System.InvalidOperationException。为了避免这种情况,程序应该在管理模式下运行。 【参考方案1】:

至少在 CPU 方面,您可以使用 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;

【讨论】:

我收到此错误:“enumerator.Current”引发了“System.InvalidOperationException”类型的异常 @Aaron - 有趣。不知道你们的主板厂商是否支持这个WMI监控(不是所有的都支持)。 我得到了 enumerator.MoveNext() 不支持的 ManagementException 其他人得到这个吗? Sadlyl,大多数主板不通过 WMI 实现这一点。它也会在我的系统上引发异常。 我只想指出 MSAcpi_ThermalZoneTemperature 不是 CPU 温度;而是主板某个区域的温度……这与根据厨房的温度测量厨房炉灶的温度一样有用……【参考方案2】:

在 Windows 上进行硬件相关编码的最佳方式是使用 WMI,这是 Microsoft 的 Code Creator 工具,该工具将根据您在硬件相关数据中查找的内容为您创建代码,并且您想使用哪种 .Net 语言。

目前支持的语言有:C#、Visual Basic、VB Script。

【讨论】:

【参考方案3】:

请注意,MSAcpi_ThermalZoneTemperature 提供的不是 CPU 的温度,而是主板的温度。另请注意,大多数主板不通过 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
        
    

从official source 下载 zip,解压缩并在您的项目中添加对 OpenHardwareMonitorLib.dll 的引用。

【讨论】:

以上是关于CPU温度监控的主要内容,如果未能解决你的问题,请参考以下文章

conky 增加cpu温度监控

Zabbix添加对Windows 客户端CPU温度的监控

电脑怎么看cpu温度(win10怎么看cpu温度)

华硕路由器查看温度

Centos 监控CPU温度-微信报警

简单几步使用zabbix监控Linux物理服务器CPU温度