open hardware monitor是一个开源的免费软件, open hardware monitor 支持当今主板上的大多数硬件监视芯片。可以通过读取Intel和AMD处理器的核心温度传感器来监视CPU温度。可以显示ATI和Nvidia视频卡的传感器以及SMART硬盘驱动器温度。监视的值可以显示在主窗口,可自定义的桌面小工具或系统托盘中。免费的Open Hardware Monitor软件可在32位和64位Microsoft Windows XP / Vista / 7/8 / 8.1 / 10/10以及任何基于x86的Linux操作系统上运行 。
OpenHardwareMonitor能获取的传感器很多,因为本人也不是很了解这个库,这里简单记录下CPU温度的获取。
开发环境
QOTOM Q600P工控电脑,Visual Studio 2017
Open Hardware Monitor : https://github.com/openhardwaremonitor/openhardwaremonitor
新建项目
OpenHardwareMonitor源代码中有两个程序集:OpenHardwareMonitor和OpenHardwareMonitorLib
OpenHardwareMonitor是一个winform程序,OpenHardwareMonitorLib是一个类库,运行时生成OpenHardwareMonitorLib.DLL这个动态链接库,而我们要实现CPU温度信息的获取,就是要引用这个DLL
OpenHardwareMonitor界面如下图:
1. 本地新建一个WinFrom项目,将生成的OpenHardwareMonitorLib.dll拷贝到新建项目的debug目录下
2. 右键项目添加引用,浏览指定的dll文件
3. 新建一个类CpuTemperatureReader.cs来实现获取CPU温度的方法,完整代码如下:
using OpenHardwareMonitor.Hardware;
using System;
namespace ConsoleApp1
{
internal sealed class CpuTemperatureReader : IDisposable
{
private readonly Computer _computer;
public CpuTemperatureReader()
{
_computer = new Computer { CPUEnabled = true };
_computer.Open();
}
public void GetTemperaturesInCelsius()
{
foreach (var hardware in _computer.Hardware)
{
hardware.Update(); //use hardware.Name to get CPU model
foreach (var sensor in hardware.Sensors)
{
if (sensor.SensorType == SensorType.Temperature && sensor.Value.HasValue)
{
Console.WriteLine("{0}, Value={1}, Min Value={2}, Max Value={3}",
sensor.Name, sensor.Value.Value, sensor.Min.Value, sensor.Max.Value);
}
}
}
}
public void Dispose()
{
try
{
_computer.Close();
}
catch (Exception)
{
//ignore closing errors
}
}
}
}
4. 接下来只要在主程序入口实例化CpuTemperatureReader并调用GetTemperaturesInCelsius获取温度即可,代码如下:
using System.Threading;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
CpuTemperatureReader cpu = new CpuTemperatureReader();
while (true)
{
cpu.GetTemperaturesInCelsius();
Console.WriteLine("============================================================");
Thread.Sleep(1000);
}
}
}
}
5. OpenHardwareMonitorLib需要使用管理员权限才能调用,将程序设置位默认管理员权限执行,右键项目——添加新项——应用程序清单文件,将level=”asInvoker”修改为level=”requireAdministrator”
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
6. 1000毫秒读取一次 , 结果如下图:
大佬,请问一下C++可以调用这个DLL吗?
不行