欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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库和编译好的控制台程序
C#读取硬件(CPU、RAM、GPU等)状态的控制台程序(使用OpenHarewareMonitorLib 0.8.0)双击Properties,在安全性中勾选启用ClickOnce安全设置
C#读取硬件(CPU、RAM、GPU等)状态的控制台程序(使用OpenHarewareMonitorLib 0.8.0)
打开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获得权限。

主要参考:C#获取CPU温度(OpenHardwareMonitorLib.dll库)