C#用openhardwaremonitor动态链接库获取CPU温度

 

机房的空调有时会失效,如不能及时觉察和处理,则可能造成很多服务机宕机,为此,能获得计算机的cpu的温度就很重要,因为环境温度升高必然会导致cpu温度升高,所以我们可以根据机房内某台计算机cpu温度升高情况来判断空调是否正常,如异常则可通过短信或邮件发出预警,达到及时处理的目的。以下是c#利用openhardwaremonitor获取cpu温度的方法,已用于某机房温度监控,仅供参考。

1.到https://openhardwaremonitor.org/下载openhardwaremonitor,这里下载的是v0.8.0-beta版,也可到https://download.csdn.net/download/jhycjhyc/11583104下载。

2.解压下载到的包,取出其中的OpenHardwareMonitorLib.dll文件。

3.启动visual studio 2017,建立一个新的控制器项目,如下图所示:

 

4.通过主菜单的“项目”->"添加引用“->”浏览“将OpenHardwareMonitorLib.dll文件引用到项目中。

5.在program.cs中增加”using OpenHardwareMonitor.Hardware;“和”using System.Threading;“两个语句。

6.在program.cs中增加两个类,代码如下:

 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 class GetCPUTemp
    {

        public static int GetTemp()
        {
            //注意,必须以管理员身份运行方可。hhd只有已用空间一项,mainboard没有传感器。cpu温度
            UpdateVisitor updateVisitor = new UpdateVisitor();
            Computer computer = new Computer();
            computer.Open();
            computer.CPUEnabled = true;
            // computer.MainboardEnabled = true;
            // computer.HDDEnabled = true;
            computer.Accept(updateVisitor);

            int  temperature = 0;


            for (int i = 0; i < computer.Hardware.Length; i++)
            {
                //查找硬件类型为CPU
                if (computer.Hardware[i].HardwareType == HardwareType.CPU)
                {
                    for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                    {
                        string str = computer.Hardware[i].Sensors.ToString();
                        int k = 0;
       

          if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature && computer.Hardware[i].Sensors[j].Name == "CPU Core # 1")

 

        //上句获得的是cpu第一个内核的温度,改变编号可获得其他内核的温度,有的计算机还有cpu封装温度传感器,对应的

         // 语句为:computer.Hardware[i].Sensors[j].Name ==“CPU Package”

        //并非所有计算机均有cpu内核温度传感器或封装温度传感器,有些计算机可均无(尤其是以前的一些服务器),

         //有些计算机可能只有cpu内核温度传感器而没有cpu封装温度传感器。

         //欲知某一特定计算机有哪些传感器,可在此计算机上运行openhardwaremonitor.exe文件。

                  
                        {
                            temperature = Convert.ToInt32( computer.Hardware[i].Sensors[j].Value);
                        }
                    }
                }
            }
            return temperature;
        }
    }

7.在program类的main方法中添加代码,如下:

 static void Main(string[] args)
        {

            while (true)
            {
                Console.WriteLine(GetCPUTemp.GetTemp().ToString());
                Thread.Sleep(1000);
              
            }

        }

8.生成项目,以管理员身份运行生成的可执行文件,即可实时显示CPU的温度。如果在vs下调试运行,则获得的温度为0,所以需要生成后以管理员身份运行才行。但如果是在windows桌面服务器应用的项目中,则不存在这个问题,服务启动后能正常获得CPU温度。

 

 

 

 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值