2013-09-26 7 views
5

私はOpenHardwareMonitor.dll で私のプロジェクトを参照して、このコードで新しいクラスを作成しました:行でOpenHardwareMonitorライブラリを使用してCPUファン速度を取得するにはどうすればよいですか?私はそれが正常に動作して示すの体温を使用している場合は</p> <pre><code>if (sensor.SensorType == SensorType.Fan)//Temperature) </code></pre> <p>:

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; 
     } 

温度。 しかし、一度FanTypeに変更するとSensorTypeは決してファンにはならない。

そして、元のopenhardwaremonitorプログラムを実行していると、CPUファンのスピードもすべて表示されます。

なぜ私のコードではうまくいかないのですか?

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=" }, 
      }); 

たぶんため、このようなものがあるはずです**

は私が持っている一番上のForm1の中にいることを言及するのを忘れた

EDIT CPUのFANが見つかりませんでした。 元のopenhwardwaremonitorでどのように使用しているのだろうか。

は、ソースコードで検索しようとしました: http://open-hardware-monitor.googlecode.com/svn/trunk/GUI/

しかし、私は、CPU/GPUのファン速度を取得する方法を見つけることができませんでした。あなたが唯一のCPUのオブジェクト内にネストされたセンサーを探している

computer.FanControllerEnabled = true; 
+0

私の質問を編集。 – user2760148

答えて

1

が見えます。

実際にCPU内部に温度センサーがありますが、ファンはCPU内部にも接続されていません。あなたの「CPUファン」は、それを冷却するためにCPUの上に物理的に置かれているので、それと呼ばれます。

ツリー内の他の場所でファンセンサーを探します。私のシステムでは、マザーボードオブジェクト内に表示されます。 CPUモジュールの外側に配置されたセンサからも、CPU温度の追加測定値が表示されます。 CPU電圧も、少なくとも私のシステムではCPU外で検知されるため、ハードウェア監視ツリーのCPUではなく、マザーボード内に入れ子になっています。

このように、myComputer.CPUEnabled = true;は、残りのセンサーツリーを有効にするには不十分な場合があります。誰のために、まだこれで苦労

+0

それは実際にファン速度を制御(変更)しているわけではありませんか? –

+0

@BenVoigtそれだけではありません。同じ命名規則であるOPの '.GPUEnabled = true;'と 'CPUEnabled = true;'を参照してください。センサを読み取って制御しているように見えます.2つの区別はありません。私の決定的でないオープニング・ワードに注意してください。 – bland

+0

ugg。まあ、それは彼の問題の半分です。残りの半分は関連しています。 –

0

:あなたはファンのリーダーをオンにするには、以下の必要があるよう

2

は、最初にOpenHardwareMonitor.Hardware.Computerオブジェクトにメインボードを有効にする必要があります。

Computer computerHardware = new Computer(); 
computerHardware.MainboardEnabled = true; 

あなたはその後、深いハードウェアレイヤを検索する必要があります。私が意味する。これにより

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を持っていることは非常に重要です)。それを呼び出すと、コントロールタイプのセンサーが表示されます(私は痛い経験から知っています)。

こちらがお役に立てば幸いです。

参考文献:
SuperIO
Mainboard

+1

ファン番号は必ずしもCPUファンであるとは限りません。マザーボード上の何番のものかを示すコンフィギュレーションファイルを用意することをお勧めします。 –

関連する問題

 関連する問題