C#读取硬件(CPU、RAM、GPU等)状态的控制台程序(使用OpenHarewareMonitorLib 0.8.0)
程序员文章站
2022-05-30 19:35:30
...
现在各类硬件监测软件多如牛毛,但是大多数都是完整的安装程序,对于强迫症来说,能不安装就尽量不给电脑上安装软件,搞得C、D盘乱七八糟,那就必须要自己写了,查阅各种资料认为使用开源的OpenHarewareMonitorLib最方便。要注意的是该库是使用Microsoft .NET Framework 2.0的,版本差异可能导致编译失败,这点我没有验证。
首先在GitHub下载OpenHarewareMonitorLib并添加到引用中。或者支持一下,我上传的OpenHarewareMonitorLib库和编译好的控制台程序。
双击Properties,在安全性中勾选启用ClickOnce安全设置
打开app.manifest,将
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
替换为
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
然后一定要回到Properties,在安全性中取消勾选启用ClickOnce安全设置。
到此准备工作完成,在Program.cs中先添加using
using OpenHardwareMonitor.Hardware;
然后在
namespace MyMonitor
{
后面添加
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) { }
}
在主函数中先进行实例化,并开启各个硬件监测。
UpdateVisitor updateVisitor = new UpdateVisitor();
Computer myComputer = new Computer();
myComputer.Open();
//启动主板监测
myComputer.MainboardEnabled = true;
//启动CPU监测
myComputer.CPUEnabled = true;
//启动内存监测
myComputer.RAMEnabled = true;
//启动GPU监测
myComputer.GPUEnabled = true;
//启动风扇监测
myComputer.FanControllerEnabled = true;
//启动硬盘监测
myComputer.HDDEnabled = true;
在循环中更新数据,并遍历每一个硬件的每一个传感器数值,显示出来。
do
{
myComputer.Accept(updateVisitor);
Console.Clear();
foreach (var hardwareItem in myComputer.Hardware)
{
Console.WriteLine(hardwareItem.HardwareType + "型号是:" + hardwareItem.Name);
foreach (var sensor in hardwareItem.Sensors)
{
Console.WriteLine(sensor.Name + "的" + sensor.SensorType + "是" + sensor.Value);
}
}
System.Threading.Thread.Sleep(1000);
} while (true);
大功告成,生成并运行。如果在VS环境中会提示需要重新启动VS获得权限。