C#使用openhardwaremonitor开源库

By | 2019-09-30

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界面如下图:

Open Hardware Monitor

1. 本地新建一个WinFrom项目,将生成的OpenHardwareMonitorLib.dll拷贝到新建项目的debug目录下

DLL

2. 右键项目添加引用,浏览指定的dll文件

添加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毫秒读取一次 , 结果如下图:

openhardwaremonitor

2 thoughts on “C#使用openhardwaremonitor开源库

  1. 青柠

    大佬,请问一下C++可以调用这个DLL吗?

    Reply

发表评论

邮箱地址不会被公开。 必填项已用*标注