如何关闭cpu风扇:如何使用OpenHardwareMonitorlib获取cpu风扇速度

我用 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
{
    cl 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)

如果我使用的温度,它的工作正常,并显示温度。但一旦我把它改为风扇的 SensorType 从不 = = 到风扇

如果我运行原来的 openhardwaremonitor 程序,它显示所有的东西,甚至 CPU 风扇速度。

那么,为什么在我的 code 它不工作?

编辑 * *

忘了提到,在 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 的风扇,但我找不到任何。所以我想知道他们如何在原始的 openhwardwaremonitor 中使用它。

试图在源代码中搜索:http://open-hardware-monitor.googlecode.com/svn/trunk/GUI/

但我没有找到如何获得 cpu / gpu 风扇速度。

5

对于仍在为此而苦苦挣扎的任何人,您首先必须在 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();在那里调用,否则您只会看到控制类型的传感器(我从痛苦的经历中知道)。

我希望这有帮助。

References:
SuperIO
Mainboard
2

看起来你需要以下打开风扇阅读器:

computer.FanControllerEnabled = true;
2

您只寻找嵌套在 CPU 对象内的传感器。

CPU 内部实际上有温度传感器,但风扇既不在 CPU 内部,也不连接到 CPU。您的“CPU 风扇”之所以被称为“CPU 风扇”,是因为它实际上放置在 CPU 顶部以冷却它。

在树中的其他位置查找风扇传感器。在我的系统上,它们显示在主板对象中。您还可以从放置在 CPU 模块外部的传感器中找到 CPU 温度的其他测量值。CPU 电压也是在 CPU 外部检测的,至少在我的系统上,因此嵌套在主板中,而不是硬件监视树中的 CPU。

如平淡无奇地指出的,myComputer.CPUEnabled = true;可能不足以启用传感器树的其余部分。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(595)
Cu2o与稀硫酸反应:h2o.性能预测与h2o.预测不同(performance predictions)
上一篇
Cod16曳光弹:球互相弹开(bouncing off)
下一篇

相关推荐

  • concord是什么牌子:穿越时空,体验Concord的非凡之美

    Concord是一个美国安全品牌,专门为家庭和企业提供安全产品。它的产品包括家用安全系统、安全监控设备、智能锁、安全门等。代码:CONCORD…

    2023-03-13 11:05:04
    0 11 83
  • cords是什么意思:如何使用Cords来提高生产力

    示例示例Cords是一种常用的设计模式,它允许你把多个函数链接在一起,以便更好地处理复杂的逻辑。代码示例:…

    2023-01-28 07:40:52
    0 25 92
  • java foreach跳出本次循环:使用break语句跳出Java Foreach循环

    Java foreach跳出本次循环可以使用continue语句。continue语句会跳过当前循环中剩余的语句,然后继续下一次循环。…

    2023-01-11 12:12:41
    0 20 93
  • what can i do for you 回答:How Can I Help You?

    这取决于您想要我做什么。我可以帮助您完成一些编程任务,如创建网站,编写脚本,编写应用程序,编写API,编写数据库,编写算法,编写机器学习模型等。我也可以帮助您解决其他技术问题,如调试代码,优化性能,解决安全问题等。例如,我可以为您编写以下代码,以实现某些功能:…

    2023-01-26 13:54:16
    0 57 44
  • mifare classic tool怎么用:使用Mifare Classic Tool来管理你的Mifare Classic卡

    Mifare Classic Tool是一款开源的Android应用程序,它可用于读取和写入Mifare Classic NFC标签。它的主要功能是:…

    2023-02-17 15:24:20
    0 57 49
  • cordic算法详解:实现CORDIC算法的数学原理及其应用

    CORDIC(COordinate Rotation DIgital Computer)算法是一种基于反复旋转的数字算法,可以用来计算几何函数(如正弦、余弦、正切等)和其他复杂函数,因此也被称为旋转算法。它是一种非常有效的算法,可以在很少的时间内实现几何函数的计算。CORDIC算法的基本思想是:通过反复旋转向量,以达到计算几何函数的目的。它的具体步骤如下:…

    2023-01-14 16:01:55
    0 36 32
  • struct和class区别 A Comparison of Their Characteristics and Uses

    示例示例struct和class的主要区别在于:struct是值类型,class是引用类型。…

    2023-01-27 15:29:38
    0 83 72
  • curl 超时时间设置解决网络请求延迟的最佳实践

    示例示例cURL 超时时间设置是指在 cURL 发出请求后,等待服务器响应的最长时间。如果超过了设定的超时时间,则会收到一个超时错误。可以使用 curl_setopt() 函数来设置 cURL 超时时间,该函数的第一个参数是 cURL 资源句柄,第二个参数是 CURLOPT_TIMEOUT,用于设置 cURL 超时时间。…

    2023-02-22 07:17:34
    0 78 65

发表评论

登录 后才能评论

评论列表(83条)