C# 获取CPU 温度 的两种方式

发布时间 2023-09-01 03:52:45作者: soliang

上次接手了一个需要对服务器的检测系统软件,但是在获取CPU温度的时候总是出问题,查找了很多的资料,总结了以下两种方法,是比较常见的

//第一种方法 就是传统的 wimi 方式获取 ,需要引进一个命名空间 using System.Management;

public static void GetCPUTemperature()
{
string str = "";

ManagementObjectSearcher vManagementObjectSearcher = new ManagementObjectSearcher(@"root\WMI", @"select * from MSAcpi_ThermalZoneTemperature");

foreach (ManagementObject managementObject in vManagementObjectSearcher.Get())
{
str += managementObject.Properties["CurrentTemperature"].Value.ToString();
}

//这就是CPU的温度了
float temp = (float.Parse(str) - 2732) / 10;


}

这种方式往往跟服务器本身的硬件配置是有关系的,可能会在 foreach (ManagementObject managementObject in vManagementObjectSearcher.Get()) 这一行代码报错

解决方案一:用管理员身份运行你的项目 (如果还是有错的话,那就使用第二种方式吧)

 

///第二种方法 据说是非wimi方式,好像是通过虚拟硬盘读取的(没看太懂)(也是要以管理员身份运行这个软件)

这个方法需要引进一些现有的开源类库(OpenHardwareMonitor.csproj,OpenHardwareMonitorLib.csproj)

下载地址:http://download.csdn.net/detail/liyanping521/5216007

这种方法是借鉴别人的,是一个OpenHardwareMonitor的开源检测软件,有源码和使用方法

Open Hardware Monitor可以支持大部分常见的主板芯片与硬件组件,监控包含主板、CPU、硬盘、显示卡、装置的电压、温度、风扇转速与运作频率、负载等信息。

使用方法:将库添加至项目中(就是将你下载的项目源码放你的项目里边或者是引用编译好的dll 文件)

声明:

PersistentSettings settings =new PersistentSettings();

UpdateVisitor updateVisitor = new UpdateVisitor();

初始化config配置文件,详情见Bin目录Debug/Replase\OpenHardwareMonitor.config文件

//Application 的命名空间是 System.Windows.Forms; 别引用错了
settings.Load(Path.ChangeExtension(
Application.ExecutablePath, ".config"));

初始化Computer对象

Computer computer= new Computer(settings);

调用open方法,这个方法一定要打开

conputer.open();

获取cpu温度:

StringBuilder str = new StringBuilder();

computer.Accept(updateVisitor);
for (int i = 0; i < computer.Hardware.Length; i++)
{

//循环找到HardwareType为cpu
if (computer.Hardware[i].HardwareType == HardwareType.CPU)
{
for (int j = 0; j < computer.Hardware[i].Sensors.Length;j++ )
{

//找到温度
if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
{

//获取到cpu核心
str.Append(computer.Hardware[i].Sensors[j].Name);
str.Append("\t");

//这里就是cpu温度了
str.Append(computer.Hardware[i].Sensors[j].Value.ToString());
str.Append("\n");
}
}
}
}

Console.WriteLine(str.ToString());
————————————————
版权声明:本文为CSDN博主「弹一曲温柔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanpingsoft/article/details/8754679