Как читать температуру жесткого диска? - PullRequest
12 голосов
/ 10 ноября 2011

Можно ли увидеть температуру Харрдиска с помощью некоторого API S.M.A.R.T или чего-то подобного?

Мне просто нужен темп, больше ничего в C #

Ответы [ 2 ]

8 голосов
/ 10 ноября 2011

Вот фрагмент кода из этой статьи Надеюсь, это поможет

//S.M.A.R.T.  Temperature attribute
const byte TEMPERATURE_ATTRIBUTE = 194;

public List<byte> GetDriveTemp()
{
    var retval = new List<byte>();
    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;
}
1 голос
/ 10 ноября 2011

используйте VMI и MSStorageDriver_ATAPISmartData для получения VendorSpecific байтового массива, а номер 115 байтов - это температура.Почему 115?Подробнее здесь .

Код частично сгенерирован с помощью 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();
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...