C#读取硬件(CPU、RAM、GPU等)状态的控制台程序(使用OpenHarewareMonitorLib 0.8.0)

现在各类硬件监测软件多如牛毛,但是大多数都是完整的安装程序,对于强迫症来说,能不安装就尽量不给电脑上安装软件,搞得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获得权限。
下面是运行效果。
在这里插入图片描述
本人非专业码农,请多指教,谢谢。

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

### 回答1: 以下是使用Solidity编写的简单Hello World应用程序的示例代码: ``` pragma solidity ^0.8.0; contract HelloWorld { string greeting; constructor() { greeting = "Hello, World!"; } function getGreeting() public view returns (string memory) { return greeting; } } ``` 这个合约定义了一个名为`HelloWorld`的Solidity合约。构造函数初始化了一个字符串变量`greeting`,值为"Hello, World!"。函数`getGreeting()`返回了这个变量的值。注意,`getGreeting()`函数使用了`view`修饰符,表示该函数只读取合约中的数据,不会修改任何状态,因此不需要消耗任何gas费用。 要将这个合约部署到以太坊网络上,需要使用Solidity编译器将其编译为字节码,并将字节码发送到以太坊网络上。在部署完成后,可以通过调用`getGreeting()`函数来查看合约的问候语。 ### 回答2: 使用Solidity编写一个hello的应用程序可以通过智能合约来实现。以下是一个简单的示例: ```solidity pragma solidity ^0.8.0; contract HelloWorld { string public greeting; constructor() { greeting = "Hello, World!"; } function sayHello() public view returns (string memory) { return greeting; } function setGreeting(string memory newGreeting) public { greeting = newGreeting; } } ``` 这个合约包含一个公共字符串变量greeting,它的初始值为"Hello, World!"。合约还包含两个函数。 `sayHello`函数是一个只读函数(view修饰符),它返回greeting的值,让外部调用者可以查看字符串。 `setGreeting`函数用于修改greeting的值,需要传入一个新的字符串作为参数。 合约部署后,可以通过调用`sayHello`函数来查看greeting的值,也可以调用`setGreeting`函数来修改greeting的值。 这是一个简单的hello应用程序示例,展示了Solidity的基本语法和智能合约的功能。使用Solidity可以构建更复杂的应用程序,实现更多的业务逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值