【发布时间】:2011-12-26 03:09:25
【问题描述】:
是否可以使用某种 S.M.A.R.T API 或类似的东西查看硬盘温度?
我只想要温度,C# 中没有别的东西
【问题讨论】:
-
没有任何问题..我只需要找到一个 S.M.A.R.T API - 我用谷歌搜索但找不到任何..
标签: c# hardware-interface
是否可以使用某种 S.M.A.R.T API 或类似的东西查看硬盘温度?
我只想要温度,C# 中没有别的东西
【问题讨论】:
标签: c# hardware-interface
这是来自 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;
}
【讨论】:
List 更改为List<byte> 并包含对System.Management 的引用。返回本地驱动器的摄氏温度,SSD 为 0。
使用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();
}
}
【讨论】: