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

上次接手了一个需要对服务器的检测系统软件,但是在获取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());

 

 

你可能感兴趣的:(C# 获取CPU 温度 的两种方式)