C#獲取CPU溫度支援Win10
【已解決】C#獲取CPU溫度支援Win10(OpenHardwareMonitor)
本方法Win10 64bit 親身測試可用,溫度可以實時更新!!
很久前在Win8實現過遠端CPU溫度監控,用的是WMI方法,感覺簡單易用。
現在換上了Win10,發現獲取到的溫度一直不會變,於是找到了http://blog.csdn.net/yanpingsoft/article/details/8754679 提到了OpenHardwareMonitor,於是就嘗試了一下,但發現了一個問題:只有先執行現成的OpenHardwareMonitor.exe,我的C#程式才能讀到溫度值,否則為null。情況跟http://bbs.csdn.net/topics/391007951?page=1的一樣。
搞了許久,沒頭緒,於是打算更新下OpenHardwareMonitor的庫。於是網上百度“OpenHardwareMonitor”,找到最新的0.8.0beta的版本,下載替換了OpenHardwareMonitorLib.dll。試了下發現不能相容,所以稍微改下程式碼,增加一句:computer.CPUEnabled = true;就完事了。完整的使用程式碼如下:
1、新增引用OpenHardwareMonitorLib.dll,新增using OpenHardwareMonitor.Hardware;
2、增加一個類
public class UpdateVisitor : IVisitor
{
public void VisitComputer(IComputer computer)
{
computer.Traverse(this);
}
public void VisitHardware(IHardware hardware)
{
hardware.Update();
foreach (IHardware subHardware in hardware.SubHardware)
subHardware.Accept(this);
}
public void VisitSensor(ISensor sensor) { }
public void VisitParameter(IParameter parameter) { }
}
3、具體實現程式碼:
private void button1_Click(object sender, EventArgs e)//某個按鍵觸發
{
UpdateVisitor updateVisitor = new UpdateVisitor();
Computer computer = new Computer();
computer.Open();
computer.CPUEnabled = true;
computer.Accept(updateVisitor);
for (int i = 0; i < computer.Hardware.Length; i++)
{
//迴圈找到HardwareType為cpu
if (computer.Hardware[i].HardwareType == HardwareType.CPU)
{
for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
{
//找到溫度
if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
{
if (computer.Hardware[i].Sensors[j].Name == "CPU Package") //我只獲取整個package的溫度,需要其他core的溫度就改這裡
Console.WriteLine("Tem=" + computer.Hardware[i].Sensors[j].Value.ToString());
}
}
}
}
computer.Close();
}