2011-11-10 142 views
11

是否有可能使用某种S.M.A.R.T API或类似的东西来看Harrdisk温度?如何读取HardDisk温度?

我只是想临时,闲来无事在C#

+0

产生在哪里的问题? – Burimi

+1

没有任何问题..我只需要找到一个SMART API - 谷歌搜索,但没有找到任何.. – Mathias

回答

6

下面是从这个article 代码片段希望它有助于

//S.M.A.R.T. Temperature attritube 

const byte TEMPERATURE_ATTRIBUTE = 194; 
public List GetDriveTemp() 
{ 
    List retval = new List(); 
    try 
    { 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData"); 
       //loop through all the hard disks 
     foreach (ManagementObject queryObj in searcher.Get()) 
     { 
      byte[] arrVendorSpecific = (byte[])queryObj.GetPropertyValue("VendorSpecific"); 
      //Find the temperature attribute 
         int tempIndex = Array.IndexOf(arrVendorSpecific, TEMPERATURE_ATTRIBUTE); 
      retval.Add(arrVendorSpecific[tempIndex + 5]); 
     } 
    } 
    catch (ManagementException err) 
    { 
     Console.WriteLine("An error occurred while querying for WMI data: " + err.Message); 
    } 
    return retval; 
} 
+0

为什么它tempIndex + 5,我已经发布了一个关于它的问题,但做您知道如何从属性193(加载/卸载循环计数)获取数据 –

+0

工作正常,一旦您将'List'更改为'List '并且包含对'System.Management'的引用。返回本地驱动器的摄氏度,对于SSD返回0。 – TaW

1

使用VMI和MSStorageDriver_ATAPISmartData得到VendorSpecific字节数组,115字节数为温度。为什么115?更多here

代码部分与VMI Code Creator

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", 
"SELECT * FROM MSStorageDriver_ATAPISmartData"); 

foreach (ManagementObject queryObj in searcher.Get()) 
{ 
    if (queryObj["VendorSpecific"] != null) 
    { 
     byte[] arrVendorSpecific = (byte[])(queryObj["VendorSpecific"]); 
     string temp = arrVendorSpecific[115].ToString(); 
    } 
}