简体   繁体   English

如何读取硬盘温度?

[英]How to read HardDisk Temperature?

Is it possible to see the Harrdisk temperature with somekind of SMART API or anything like that?是否可以使用某种 SMART API 或类似的东西查看硬盘温度?

i just want the temp, nothing else in C#我只想要温度,在 C# 中没有别的

Here is code snippet from this article Hope it helps这是本文的代码片段希望它有帮助

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

use VMI and MSStorageDriver_ATAPISmartData to get VendorSpecific byte array and 115 byte number is temperature.使用 VMI 和MSStorageDriver_ATAPISmartData获取VendorSpecific字节数组,115 字节数是温度。 Why 115?为什么是115? More here .更多在这里

Code partly generated with VMI Code Creator部分代码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();
    }
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM