【发布时间】:2014-06-19 07:51:44
【问题描述】:
我正在使用此代码获取 cpu 温度,但我得到的是“不支持”而不是温度。
public static string getCpuTemperature()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSAcpi_ThermalZoneTemperature");
//Win32_TemperatureProbe
foreach (ManagementObject queryObj in searcher.Get())
{
double temp = Convert.ToDouble(queryObj["CurrentTemperature"].ToString());
double temp_critical = Convert.ToDouble(queryObj["CriticalTripPoint"].ToString());
double temp_cel = (temp / 10 - 273.15);
double temp_critical_cel = temp_critical / 10 - 273.15;
return temp_cel.ToString() + " _ " + temp_critical_cel.ToString();
}
}
catch (ManagementException e)
{
//MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
return e.Message.ToString();
}
return "";
}
我已经用谷歌搜索了这个问题,并看到了很多答案,包括: - 主板不支持此功能 - 以管理权限运行 VS 等等……
但它们都不是真的,因为像 OpenHardwareMonitor 和 SpeedFan 这样的程序会显示 cpu 和 gpu 的温度、硬盘温度、cpu 风扇速度和所有其他信息。
我想知道他们是怎么做到的?我怎么会收到“不支持”消息而这些程序却没有。
【问题讨论】:
-
呃,来自每个核心?所有内核都在同一个 CPU 中,并且通常具有相同的温度。 (除非你有一个多 CPU 系统)
-
这是非常不正确的,大多数软件都在单核上运行,所以你会得到很大的温差。
-
我怀疑你提到的软件产品没有使用WMI。
-
顾名思义,OpenHardwareMonitor 是开源的,你可以看看这里的代码code.google.com/p/open-hardware-monitor/source/browse/trunk/… 比如。
-
@Lithium 为什么不在你的应用程序中引用
OpenHardwareMonitorLib.dll?