2012-08-02 71 views
3

我正在嘗試使用OpenHardwareMonitor獲取有關我的硬件的診斷信息。如果你曾經嘗試過使用OHM,那麼你知道它的文檔很少,但據我所知,沒有其他開源庫是精確和強大的。從OpenHardwareMonitor獲取硬件溫度

我已經能夠從CPU獲得負載和時鐘速度,但沒有溫度。 我也沒有收到關於硬盤的任何信息(溫度最關心我)。

這是我的實現,它應該返回它的所有內容,但到目前爲止,我只能獲得關於RAM(無臨時),CPU(無臨時)和GPU的有限信息。

CPU溫度是我最重要的數據跟蹤。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using OpenHardwareMonitor.Hardware; 

namespace OHMWrapper 
{ 
    public class MySettings : ISettings 
    { 
     private IDictionary<string, string> settings = new Dictionary<string, string>(); 

     public MySettings(IDictionary<string, string> settings) 
     { 
      this.settings = settings; 
     } 

     public bool Contains(string name) 
     { 
      return settings.ContainsKey(name); 
     } 

     public string GetValue(string name, string value) 
     { 
      string result; 
      if (settings.TryGetValue(name, out result)) 
       return result; 
      else 
       return value; 
     } 

     public void Remove(string name) 
     { 
      settings.Remove(name); 
     } 

     public void SetValue(string name, string value) 
     { 
      settings[name] = value; 
     } 
    } 

    public class OHW 
    { 
     private static OHW m_Instance; 
     public static OHW Instance 
     { 
      get 
      { 
       if (m_Instance == null) 
        m_Instance = new OHW(); 

       return m_Instance; 
      } 
     } 
     private OHW() 
     { 
      m_Instance = this; 
     } 

     public void GetCPUTemp() 
     { 
      MySettings settings = new MySettings(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=" }, 
      }); 

      Computer myComputer = new Computer(settings) 
      { 
       MainboardEnabled = true, 
       CPUEnabled = true, 
       RAMEnabled = true, 
       GPUEnabled = true, 
       FanControllerEnabled = true, 
       HDDEnabled = true 
      }; 

      myComputer.Open(); 

      foreach (var hardwareItem in myComputer.Hardware) 
      { 
       hardwareItem.Update(); 

       if (hardwareItem.SubHardware.Length > 0) 
       { 
        foreach (IHardware subHardware in hardwareItem.SubHardware) 
        { 
         subHardware.Update(); 

         foreach (var sensor in subHardware.Sensors) 
         { 

          Console.WriteLine(String.Format("{0} {1} = {2}", sensor.Name, sensor.Hardware, sensor.Value.HasValue ? sensor.Value.Value.ToString() : "no value")); 
         } 
        } 
       } 
       else 
       { 
        foreach (var sensor in hardwareItem.Sensors) 
        { 

         Console.WriteLine(String.Format("{0} {1} = {2}", sensor.Identifier, sensor.Hardware, sensor.Value.HasValue ? sensor.Value.Value.ToString() : "no value")); 
        } 
       } 
      } 
     } 
    } 
} 

我一直在尋找源代碼,因爲它是得到任何信息的唯一方法。這是一個緩慢的過程,但我非常感謝任何幫助。

OpenHardwareMonitor源代碼:http://code.google.com/p/open-hardware-monitor/source/browse/

+0

並非所有的硬盤驅動器報告一個溫度計。你確定你試圖讀取的硬盤提供這些數據嗎? – JYelton 2012-08-02 19:59:43

+0

如果WMI獲得任何內容,WMI會爲它讀取數據。 – 2012-08-02 20:03:48

+0

嘗試添加在OpenHardwareMonitor.config中找到的所有設置。有一個類PersistantSettings,我相信它是在實現'ISettings'並知道如何讀取配置文件的源代碼中調用的。 – Tergiver 2012-08-02 21:03:37

回答

3

我不得不運行此代碼與系統管理員權限來獲得我想要的信息。我添加了一個清單文件,要求代碼與這些文件一起運行。感謝您提供所有有用的信息。

1

我也卡住了這個,我只是想分享我的經驗...

因此,與系統管理員權限運行,這是mandantory。儘管如此,從網絡共享運行時,它仍然可能無法正常工作。

的設置的東西(MySettings)和CPU的字符串是沒有必要... 我只是用

myComputer = new Computer() { CPUEnabled = true }; 

這一切;)

歡呼聲中,斯蒂芬