Как читать температуру HardDisk?

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

Я просто хочу temp, ничего больше в С#

Ответ 1

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

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

Ответ 2

используйте 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();
    }
 }