2013-09-26 6 views
5

I verwiesen mein Projekt mit OpenHardwareMonitor.dll Und dann schuf neue Klasse mit diesem Code:Wie bekomme ich die CPU-Lüftergeschwindigkeit mit der OpenHardwareMonitor-Bibliothek?

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

Auf der Linie:

if (sensor.SensorType == SensorType.Fan)//Temperature) 

Wenn ich die Temperatur bin mit es funktioniert gut und zeigt, die Temperatur. Aber sobald ich es zu Fan der SensorType nie == zum Fan

Und wenn ich das original openhardwaremonitor-Programm läuft, zeigt es alle Sachen sogar die CPU-Lüftergeschwindigkeit.

Warum in meinem Code funktioniert es nicht?

EDIT **

vergessen an der Spitze, in Form1 zu erwähnen, ich habe:

private CpuTemperature cpu; 

Dann im Konstruktor:

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

Vielleicht sollte es für so etwas wie diese der FAN der CPU, aber ich konnte keine finden. Also ich frage mich, wie sie es im ursprünglichen Openhwardwaremonitor verwenden.

Versuchte in den Quellcode zu suchen: http://open-hardware-monitor.googlecode.com/svn/trunk/GUI/

aber ich habe nicht gefunden, wie man die CPU/GPU-Fans Geschwindigkeit.

+0

meine Frage bearbeitet werden. – user2760148

Antwort

1

Sieht aus wie Sie die folgenden Funktionen den Ventilator Leser benötigen:

computer.FanControllerEnabled = true; 
+0

Ist das nicht für das Steuern (Ändern) von Lüftergeschwindigkeiten? –

+0

@BenVoigt Es ist nicht nur dafür. Siehe OPs '.GPUEnabled = true;' und 'CPUEnabled = true;' die gleiche Namenskonvention. Scheint, dass es Sensoren liest und kontrolliert - keine Unterscheidung zwischen den beiden. Beachten Sie jedoch meine nicht definitiven Eröffnungsworte. – bland

+0

Uggh. Nun, das ist die Hälfte seines Problems. Die andere Hälfte ist verwandt. –

0

Sie sind nur für Sensoren verschachtelt innerhalb des CPU-Objekt suchen.

Es gibt tatsächlich Temperatursensoren in der CPU, aber die Lüfter sind weder in der CPU noch daran angeschlossen. Ihr "CPU-Fan" wird so genannt, weil er physisch auf der CPU platziert ist, um ihn zu kühlen.

Suchen Sie nach Lüftersensoren an anderer Stelle im Baum. Auf meinem System werden sie im Motherboard-Objekt angezeigt. Sie finden dort auch zusätzliche Messungen der CPU-Temperatur von Sensoren, die sich außerhalb des CPU-Moduls befinden. Auch die CPU-Spannung wird zumindest auf meinem System außerhalb der CPU abgetastet und daher innerhalb des Motherboards und nicht der CPU im Hardware-Überwachungsbaum verschachtelt.

Wie schon erwähnt, reicht die myComputer.CPUEnabled = true; möglicherweise nicht aus, um den Rest des Sensorbaums zu aktivieren.

2

Für alle noch kämpfen mit diesem, müssen Sie zunächst das Mainboard in Ihrem OpenHardwareMonitor.Hardware.Computer Objekt aktivieren:

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

Sie dann tief Hardware-Schichten suchen.
Damit meine ich:

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

Es ist sehr wichtig, dass Sie die subhardware.update haben(); ruf dort rein, sonst wirst du nur Kontrollsensoren sehen (ich kenne schmerzhafte Erfahrung).

Ich hoffe, das hilft.

Referenzen:
SuperIO
Mainboard

+1

Die Lüfterzahl bedeutet nicht unbedingt, dass es sich um den CPU-Lüfter handelt. Eine gute Übung wäre eine Konfigurationsdatei, die angibt, welche Nummer auf dem Motherboard steht. –

Verwandte Themen