开发环境
QOTOM工控电脑,Visual Studio 2017,OpenHardwareMonitor开源库
OpenHardwareMonitor: https://github.com/openhardwaremonitor/openhardwaremonitor
新建项目
OpenHardwareMonitor源代码中有两个程序集:OpenHardwareMonitor和OpenHardwareMonitorLib
OpenHardwareMonitor是一个winform程序,OpenHardwareMonitorLib是一个类库,运行时生成OpenHardwareMonitorLib.DLL这个动态链接库,而我们要实现CPU温度信息的获取,就是要引用这个DLL
OpenHardwareMonitor界面如下图:
OpenHardwareMonitor能获取的传感器还是很多的,因为本人也不是很了解这个库,这里只简单介绍下如何获取CPU温度
本地新建一个WinFrom项目,将生成的OpenHardwareMonitorLib.dll拷贝到新建项目的debug目录下
右键项目添加引用,浏览指定的dll文件
然后引用OpenHardwareMonitor.Hardware这个命名空间,继承IVisitor这个接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20using OpenHardwareMonitor.Hardware;
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) { }
}接下来要实例化我们访问的对象,这里命名为myComputer,通过myComputer这个对象的一些属性,我们可以得到我们需要获取的信息
1
2
3
4
5Computer myComputer = new Computer();
UpdateVisitor updateVisitor = new UpdateVisitor();
myComputer.Open();
myComputer.CPUEnabled = true;
myComputer.Accept(updateVisitor);获取CPU温度代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35class Program
{
static int GetTemperature()
{
int ret = 0;
Computer myComputer = new Computer();
UpdateVisitor updateVisitor = new UpdateVisitor();
myComputer.Open();
myComputer.CPUEnabled = true;
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);
Console.WriteLine("NAME:" + sensor.Name + " Value:" + sensor.Value + "°C MIN:" + sensor.Min + "°C Max:" + sensor.Max + "°C");
}
}
}
}
myComputer.Close();
return ret;
}
static void Main(string[] args)
{
GetTemperature();
Console.ReadKey();
}OpenHardwareMonitorLib需要使用管理员权限才能调用,将程序设置位默认管理员权限执行,右键项目——添加新项——应用程序清单文件,将level=”asInvoker”修改为level=”requireAdministrator”
1
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
运行结果,这里只调用了一次,可以做成多线程,500毫秒读一次
项目地址:https://github.com/huchanghui123/Read-PC-hardware-info.git