天天看點

C#擷取CPU溫度(OpenHardwareMonitorLib.dll庫)

作者嘗試過WinIo,Rdmsr,WMI,OpenHardwareMonitorLib。OpenHardwareMonitorLib和rdmsr都是用的WinRing0.sys驅動,然後要在程式裡面加載這個驅動就可讀取這些寄存器的值。OpenHardwareMonitorLib把驅動封裝到自己的内部來了,這裡講的是OpenHardwareMonitorLib的方法,很簡單:

OpenHardwareMonitorLib.dll下載下傳位址:​​javascript:void(0)​​

1、下載下傳OpenHardwareMonitorLib庫,并引用到項目中

using System;
using OpenHardwareMonitor.Hardware;
using System.Text;

namespace VS_ReadCPUTemperature
{
    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) { }
    }
    class Program
    {
        static int getTemperature() 
        {
            int ret = 0;
            Computer myComputer = new Computer();
            UpdateVisitor updateVisitor = new UpdateVisitor();
            myComputer.Open();
            myComputer.Accept(updateVisitor);
            foreach (var hardwareItem in myComputer.Hardware)
            {
                if (hardwareItem.HardwareType == HardwareType.CPU)
                {
                    foreach (var sensor in hardwareItem.Sensors)
                    {
                        if (sensor.SensorType == SensorType.Temperature)
                        {
                            ret = Convert.ToInt32(sensor.Value);
                        }
                    }
                }
            }
            return ret;
        } 
        static void Main(string[] args)
        {
            int t = getTemperature();
            Console.WriteLine("溫度是:" + t);
            Console.ReadKey();

            //如果檔案不存在,則建立;存在則覆寫
            //System.IO.File.WriteAllText(@"C:\Users\Public\Documents\CPUTemperature.txt", t.ToString(), Encoding.UTF8);
        }
    }
}