1. 程式人生 > >C#獲取CPU溫度支援Win10

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();
        }