所以我一直试图使用WMI来获取CPU的温度一段时间。在我测试的两台机器中,带有英特尔处理器和Windows 7的机器运行得很好,其中AMD处理器和Windows 8.1的机器运行失败。我正在使用我在另一个问题上找到的简单片段,但问题是陈旧的,并且没有讨论Windows 8 / 8.1。这是片段:
public class Temperature
{
public double CurrentValue { get; set; }
public string InstanceName { get; set; }
public static List<Temperature> Temperatures
{
get
{
List<Temperature> result = new List<Temperature>();
ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature");
foreach (ManagementObject obj in searcher.Get())
{
Double temp = Convert.ToDouble(obj["CurrentTemperature"].ToString());
temp = (temp - 2732) / 10.0;
result.Add(new Temperature { CurrentValue = temp, InstanceName = obj["InstanceName"].ToString() });
}
return result;
}
}
}
但是,只要我调用searcher.Get()
,它就会导致一个ManagementException,并显示消息“Not Supported。”
我知道我有所有必要的硬件要求,因为其他工具(Core temp和Speccy)会使温度恢复正常。
除此之外,我还开始研究Win32_TemperatureProbe
,但这还没有完成。如果有人知道这方面的好参考资料,如果你愿意的话我会非常感激。
编辑:我正在使用.NET 3.5在Windows 8.1 x64上尝试此操作。该处理器是AMD FX8350,它与Gigabyte GA-990FXA-UD3主板连接。