c# – 如何使用OpenHardwareMonitor lib获得cpu风扇速度?
发布时间:2020-12-15 05:40:03 所属栏目:百科 来源:网络整理
导读:我用OpenHardwareMonitor.dll引用了我的项目 然后使用以下代码创建新类: using System;using System.Collections.Generic;using System.Linq;using System.Text;using OpenHardwareMonitor.Hardware;using System.Diagnostics;using DannyGeneral;using Sys
我用OpenHardwareMonitor.dll引用了我的项目
然后使用以下代码创建新类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using OpenHardwareMonitor.Hardware; using System.Diagnostics; using DannyGeneral; using System.Windows.Forms; using System.Threading; namespace HardwareMonitoring { class Core { public static Form1 form1; private static List<float?> cpuSensorValues = new List<float?>(); private static List<float?> gpuSensorValues = new List<float?>(); Computer myComputer; Computer computer; public Core(Form1 f) { form1 = f; myComputer = new Computer(); myComputer.CPUEnabled = true; myComputer.Open(); computer = new Computer(); computer.Open(); computer.GPUEnabled = true; } public float? cpuView(bool pause,CpuTemperature cpuTemp,Form1 f1,List<string> myData,float? myCpuTemp,Button b1) { try { if (pause == true) { } else { Trace.WriteLine(""); foreach (var hardwareItem in myComputer.Hardware) { if (hardwareItem.HardwareType == HardwareType.CPU) { hardwareItem.Update(); foreach (IHardware subHardware in hardwareItem.SubHardware) subHardware.Update(); foreach (var sensor in hardwareItem.Sensors) { cpuTemp.SetValue("sensor",sensor.Value.ToString()); if (sensor.SensorType == SensorType.Fan)//Temperature) { sensor.Hardware.Update(); cpuTemp.GetValue("sensor",sensor.Value.ToString()); if (!f1.IsDisposed) { Thread.Sleep(1000); f1.Invoke(new Action(() => myData.Add("Cpu Temeprature --- " + sensor.Value.ToString()))); } myCpuTemp = sensor.Value; //if (sensor.Value > 60) //{ cpuSensorValues.Add(sensor.Value); if (cpuSensorValues.Count == 300) { float a = ComputeStats(cpuSensorValues).Item1; float b = ComputeStats(cpuSensorValues).Item2; float c = ComputeStats(cpuSensorValues).Item3; Logger.Write("********************************"); Logger.Write("CPU Minimum Temperature Is ===> " + a); Logger.Write("CPU Maximum Temperature Is ===> " + b); Logger.Write("CPU Average Temperature Is ===> " + c); Logger.Write("********************************" + Environment.NewLine); cpuSensorValues = new List<float?>(); } b1.Enabled = true; //} break; } } } } } } catch(Exception err) { Logger.Write("There was an exception: " + err.ToString()); } return myCpuTemp; } 在线上: if (sensor.SensorType == SensorType.Fan)//Temperature) 如果我使用温度它工作正常并显示温度. 如果我正在运行原始的openhardwaremonitor程序,它会显示所有的东西,甚至是CPU风扇的速度. 那么为什么在我的代码中它不起作用? 编辑** 忘记提到在Form1顶部我有: private CpuTemperature cpu; 然后在构造函数中: cpu = new CpuTemperature(new Dictionary<string,string> { { "/intelcpu/0/temperature/0/values","H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iu6//MH37x79i9/+NX6N3/TJm9/5f/01fw1+fosnv+A/+OlfS37/jZ/s/Lpv9fff6Ml/NTef/yZPnozc5679b+i193//TQZ+/w2Dd+P9/sZeX/67v/GTf/b3iP3u4/ObBL//73+i+f039+D8Zk/+xz/e/P6beu2TQZju8yH8f6OgzcvPv/U3/Rb8+z/0f/9b/+yfaOn8079X6fr6Cws7ln/iHzNwflPv99/wyS/+xY4+v/evcJ+733+jJ5//Cw7/4ndy9Im3+U2e/Fbnrk31C93vrt/fyPvdb+N//hsF7/4/AQAA//9NLZZ8WAIAAA==" },{ "/intelcpu/0/load/0/values","H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iu6//MH37x79i9++mpwcv/md/9df89egZ/xX/ym/5y/4D37618Lv7ya//u+58+u+5d9/z7/5t/w9/6u5fP5bH/6av+eTkXyefXxp26ONaf/v/dG/sf39D/rvnv4e5vc/0IP56/waK/vuHzf5I38P8/tv+mv8Rbb9f0pwTF9/zr/1X9vP/8I//+/6Pf7Z30N+/zdf/HX29zd/859q4aCNP5b//U+U3/+7f+zXOjZwfqvDX/V7/o9/vPz+a1G/pv0f+fGlhfk7eZ//N3/0v28//5X0u/n8Cxq7+f1X/tHft20A5x8a/W5/02+BP36Nf+j/nv8XfzrT+c2//Ob4p3+vktvUhNs/+xcWikP6e/4T/5jS5M8/sL8vP/5ff49f/Ivl9//sHzv6PX/vXyG//9R/94/9HuZ34P/5vyC//3W/5e/1exa/k+Bw4bUBnU2bP4Xg/1bn0uafeTH6PatfKL//N3/0t2y/gG9+/8+IzqYNxmU+/+jwX7afY67/nwAAAP//GYSA31gCAAA=" },}); 也许对于cpu的FAN应该有这样的东西,但我找不到任何东西. 试图在源代码中搜索:http://open-hardware-monitor.googlecode.com/svn/trunk/GUI/ 但我没有找到如何获得cpu / gpu粉丝的速度. 解决方法
对于仍在努力解决这个问题的人,首先必须在OpenHardwareMonitor.Hardware.Computer对象中启用主板:
Computer computerHardware = new Computer(); computerHardware.MainboardEnabled = true; 然后,您必须深入搜索2个硬件层. foreach (var hardware in computerHardware.Hardware) { // This will be in the mainboard foreach (var subhardware in hardware.SubHardware) { // This will be in the SuperIO subhardware.Update(); if (subhardware.Sensors.Length > 0) // Index out of bounds check { foreach (var sensor in subhardware.Sensors) { // Look for the main fan sensor if (sensor.SensorType == SensorType.Fan && sensor.Name.Equals("Fan #1",StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("CPU Fan Speed:" + Convert.ToString((int)(float)sensor.Value) + " RPM"); } } } } } 拥有subhardware.update()非常重要;在那里打电话,否则你只会看到控制型传感器(我从痛苦的经历中知道). 我希望这有帮助. 参考文献: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |