对于编程项目,我想访问来自CPU和GPU的温度读数。我将使用C#。从不同的论坛中,我得到的印象是,您需要特定的信息和开发人员资源,以便访问各种板的信息。我有一块MSI NF750-G55板。MSI的网站上没有我正在寻找的任何信息。我试过他们的技术支持,与我交谈的代表说他们没有任何这样的信息。一定有办法获取这些信息。
有什么想法吗?
发布于 2010-05-28 03:06:30
至少在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;发布于 2016-08-05 16:14:49
在windows上进行硬件相关编码的最好方法是使用微软的Code Creator工具WMI,该工具将根据您在硬件相关数据中寻找的内容和您要使用的.Net语言为您创建代码。
目前支持的语言有: C#、Visual Basic、VB Script。
发布于 2018-08-08 15:02:45
请注意,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
}
}
}从official source下载压缩包,解压并在项目中添加对OpenHardwareMonitorLib.dll的引用。
https://stackoverflow.com/questions/2923984
复制相似问题