如何读取硬盘温度?

14

有没有一种 S.M.A.R.T API 或类似的方式可以查看硬盘温度?

我只需要温度,在C#中不需要其他的东西。


1
没有问题,我只需要找到一个 S.M.A.R.T API - 我已经谷歌搜索过了,但是没有找到任何有用的信息。 - MMM
2个回答

9

这是来自文章的代码片段。

希望对您有所帮助。
//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;
}

为什么是tempIndex + 5,我已经发布了一个相关问题,但你知道如何从属性193(加载/卸载循环计数)获取数据吗? - Lyuben Todorov
1
一旦将 List 更改为 List<byte> 并包含对 System.Management 的引用,它就可以正常工作。返回本地驱动器的摄氏度,SSD 返回 0。 - TaW

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();
    }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接