【问题标题】:How to read HardDisk Temperature?如何读取硬盘温度?
【发布时间】:2011-12-26 03:09:25
【问题描述】:

是否可以使用某种 S.M.A.R.T API 或类似的东西查看硬盘温度?

我只想要温度,C# 中没有别的东西

【问题讨论】:

  • 没有任何问题..我只需要找到一个 S.M.A.R.T API - 我用谷歌搜索但找不到任何..

标签: c# hardware-interface


【解决方案1】:

这是来自 article 的代码 sn-p 希望对你有帮助

//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(加载/卸载循环计数)获取数据
  • 工作正常,一旦您将List 更改为List&lt;byte&gt; 并包含对System.Management 的引用。返回本地驱动器的摄氏温度,SSD 为 0。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2017-09-05
    • 2012-07-09
    • 2019-03-20
    • 2012-05-15
    相关资源
    最近更新 更多