作者嘗試過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);
}
}
}