对于我的 C# .Net Framework 项目,我需要获得 5 个值:
- CPU 负载
- 中央处理器温度
- 当前电压
- 视频电压
- 当前频率
我尝试了 WMI,但它不适用于现代 CPU,并且无法正确获取这些值。在做了一些研究之后,我认为获得这些值的最佳方法是使用 OpenHardwareMonitor 或 LibreHardwareMonitor ( Git )。
因此,我安装了 LibreHardwareMonitor NuGet,它添加了所有引用并且来自 GitHub 的示例代码编译,但控制台立即关闭。
从下面的示例代码中,您可以看出它输出了它可以获得的每一个指标,而我只需要我上面提到的那 5 个值。
如果有人有使用 LibreHardwareMonitor 或 OpenHardwareMonitor 的经验,如果您能告诉我如何获得我需要的那些值,我将不胜感激。
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 void Monitor()
{
Computer computer = new Computer
{
IsCpuEnabled = true,
IsGpuEnabled = true,
IsMemoryEnabled = true,
IsMotherboardEnabled = true,
IsControllerEnabled = true,
IsNetworkEnabled = true,
IsStorageEnabled = true
};
computer.Open();
computer.Accept(new UpdateVisitor());
foreach (IHardware hardware in computer.Hardware)
{
Console.WriteLine("Hardware: {0}", hardware.Name);
foreach (IHardware subhardware in hardware.SubHardware)
{
Console.WriteLine("\tSubhardware: {0}", subhardware.Name);
foreach (ISensor sensor in subhardware.Sensors)
{
Console.WriteLine("\t\tSensor: {0}, value: {1}", sensor.Name, sensor.Value);
}
}
foreach (ISensor sensor in hardware.Sensors)
{
Console.WriteLine("\tSensor: {0}, value: {1}", sensor.Name, sensor.Value);
}
}
computer.Close();
}