C#获取CPU温度

开发环境

QOTOM工控电脑,Visual Studio 2017,OpenHardwareMonitor开源库

OpenHardwareMonitor: https://github.com/openhardwaremonitor/openhardwaremonitor

新建项目

OpenHardwareMonitor源代码中有两个程序集:OpenHardwareMonitor和OpenHardwareMonitorLib

OpenHardwareMonitor是一个winform程序,OpenHardwareMonitorLib是一个类库,运行时生成OpenHardwareMonitorLib.DLL这个动态链接库,而我们要实现CPU温度信息的获取,就是要引用这个DLL

OpenHardwareMonitor界面如下图:

1567411564273

OpenHardwareMonitor能获取的传感器还是很多的,因为本人也不是很了解这个库,这里只简单介绍下如何获取CPU温度

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

    1567413654685

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

    1567414076624

  3. 然后引用OpenHardwareMonitor.Hardware这个命名空间,继承IVisitor这个接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    using 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) { }
    }
  4. 接下来要实例化我们访问的对象,这里命名为myComputer,通过myComputer这个对象的一些属性,我们可以得到我们需要获取的信息

    1
    2
    3
    4
    5
    Computer myComputer = new Computer();
    UpdateVisitor updateVisitor = new UpdateVisitor();
    myComputer.Open();
    myComputer.CPUEnabled = true;
    myComputer.Accept(updateVisitor);
  5. 获取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
    35
    class 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();
    }
  6. OpenHardwareMonitorLib需要使用管理员权限才能调用,将程序设置位默认管理员权限执行,右键项目——添加新项——应用程序清单文件,将level=”asInvoker”修改为level=”requireAdministrator”

    1
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  7. 运行结果,这里只调用了一次,可以做成多线程,500毫秒读一次

    1567475505609

项目地址:https://github.com/huchanghui123/Read-PC-hardware-info.git

------ 本文结束------