有没有一种 S.M.A.R.T API 或类似的方式可以查看硬盘温度?
我只需要温度,在C#中不需要其他的东西。
有没有一种 S.M.A.R.T API 或类似的方式可以查看硬盘温度?
我只需要温度,在C#中不需要其他的东西。
这是来自文章的代码片段。
希望对您有所帮助。//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。 - TaWMSStorageDriver_ATAPISmartData
来获取VendorSpecific
字节数组,115个字节的数字是温度。为什么是115?更多信息请参见这里。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();
}
}