CSharp - 硬件信息查询监控
说明
本篇文章采用第三方开源库openhardwaremonitor
来辅助编写查询信息,并且网上大多都是采用这种方式监控硬件信息。
常用的硬件信息有:温度、时钟频率、电压、内存占用、存储空间占用、网络传输状态···
这里仅获取到CPU温度以及GPU温度,其他查询方式类似,自己琢磨...
一.下载第三方库
下载方式:
- 项目开源地址:https://github.com/hexagon-oss/openhardwaremonitor,自己去releases中下载最新版本
并且自己编译好后,找到生成文件夹中的OpenHardwareMonitorLib.dll
,我们就使用它! - 这里提供文章的第三方dll文件OpenHardwareMonitorLib.rar,解压打开即可(Ver:0.9.7.11)
二.引用dll文件
- 如图打开项目 - 右键引用 - 添加引用
- 点击"浏览" - 选中下载解压好的dll文件即可。
三.使用
这里首先引用命名空间
using OpenHardwareMonitor.Hardware; using System;
然后复制粘贴下面的类
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) { } } public class ComputerCore { private UpdateVisitor updateVisitor = new UpdateVisitor(); private Computer computer = new Computer(); public ComputerCore() { computer.Open(); computer.CPUEnabled = true;//开启CPU信息监控 computer.GPUEnabled = true;//开启GPU信息监控 computer.Accept(updateVisitor); } /// <summary> /// 获取CPU温度 /// </summary> /// <returns></returns> public float GetCpuTemp() { computer.Accept(updateVisitor); float num = 0; float cc = 0; float avg = 0; for (int i = 0; i < computer.Hardware.Length; i++) { //查找硬件类型为CPU if (computer.Hardware[i].HardwareType == HardwareType.CPU) { for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++) { //找到温度传感器 if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature) { if (computer.Hardware[i].Sensors[j].Value is null) continue; num += (float)computer.Hardware[i].Sensors[j].Value; if((float)computer.Hardware[i].Sensors[j].Value!=0) cc++; avg = num / cc; } } } } return avg; } /// <summary> /// 获取GPU温度 /// </summary> /// <param name="isNva">是不是英伟达GPU</param> /// <returns></returns> public float GetGpuTemp(bool isNva = true) { computer.Accept(updateVisitor); HardwareType type = isNva ? HardwareType.GpuNvidia : HardwareType.GpuAti; for (int i = 0; i < computer.Hardware.Length; i++) { //查找硬件类型为CPU if (computer.Hardware[i].HardwareType == type) { for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++) { //找到温度传感器 if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature) { if (computer.Hardware[i].Sensors[j].Value is null) continue; return (float)computer.Hardware[i].Sensors[j].Value; } } } } return 0; } }
- 调用即可
实例化:public ComputerCore CCore= new ComputerCore();
CPU温度:CCore.GetCpuTemp()
GPU温度:CCore.GetGpuTemp()
(英伟达显卡) -CCore.GetGpuTemp(false)
(非英伟达显卡)
注意
- 项目框架的Framework 版本要求 4.8
- 引用后直接使用会出错,这里需要下载一个NuGet包
作者使用的就是5.0.0版本,我也就没找事,用最新版。可自行测试。 - CPU温度因为有很多内核 每个内核温度不一样,所以我取了平均值。