For my C# .Net Framework project I need to get 5 values:
- CPU Load
- CPU Temp
- Current Voltage
- VID Voltage
- Current Frequency
I tried WMI, but it doesn't work with modern CPUs, and can't get those values correctly. After doing some research, I figured that the best way to obtain those values would be to use OpenHardwareMonitor or LibreHardwareMonitor (Git).
So, I installed LibreHardwareMonitor NuGet, it's added all references and the sample code from GitHub compiles, but the console closes immediately.
From the sample code below, you can tell that it outputs every single metric that it can obtain, while I need just those 5 values that I mentioned above.
If anyone has experience with LibreHardwareMonitor or OpenHardwareMonitor, I would truly appreciate it if you would tell me how to get just those values that I need.
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();
}