C# 獲取CPU 溫度 的兩種方式
上次接手了一個需要對伺服器的檢測系統軟體,但是在獲取CPU溫度的時候總是出問題,查找了很多的資料,總結了以下兩種方法,是比較常見的
//第一種方法 就是傳統的 wimi 方式獲取 ,需要引進一個名稱空間 using System.Management;
public static void GetCPUTemperature()
{
string str = "";
ManagementObjectSearcher vManagementObjectSearcher = new ManagementObjectSearcher(@"root\WMI", @"select * from MSAcpi_ThermalZoneTemperature");
foreach (ManagementObject managementObject in vManagementObjectSearcher.Get())
{
str += managementObject.Properties["CurrentTemperature"].Value.ToString();
}
//這就是CPU的溫度了
float temp = (float.Parse(str) - 2732) / 10;
}
這種方式往往跟伺服器本身的硬體配置是有關係的,可能會在 foreach (ManagementObject managementObject in vManagementObjectSearcher.Get()) 這一行程式碼報錯
解決方案一:用管理員身份執行你的專案 (如果還是有錯的話,那就使用第二種方式吧)
///第二種方法 據說是非wimi方式,好像是通過虛擬硬碟讀取的(沒看太懂)(也是要以管理員身份執行這個軟體)
這個方法需要引進一些現有的開源類庫(OpenHardwareMonitor.csproj,OpenHardwareMonitorLib.csproj)
這種方法是借鑑別人的,是一個OpenHardwareMonitor的開源檢測軟體,有原始碼和使用方法
Open Hardware Monitor可以支援大部分常見的主機板晶片與硬體元件,監控包含主機板、CPU、硬碟、顯示卡、裝置的電壓、溫度、風扇轉速與運作頻率、負載等資訊。
使用方法:將庫新增至專案中(就是將你下載的專案原始碼放你的專案裡邊或者是引用編譯好的dll 檔案)
宣告:
PersistentSettings settings =new PersistentSettings();
UpdateVisitor updateVisitor = new UpdateVisitor();
初始化config配置檔案,詳情見Bin目錄Debug/Replase\OpenHardwareMonitor.config檔案
//Application 的名稱空間是 System.Windows.Forms; 別引用錯了
settings.Load(Path.ChangeExtension(
Application.ExecutablePath, ".config"));
初始化Computer物件
Computer computer= new Computer(settings);
呼叫open方法,這個方法一定要開啟
conputer.open();
獲取cpu溫度:
StringBuilder str = new StringBuilder();
computer.Accept(updateVisitor);
for (int i = 0; i < computer.Hardware.Length; i++)
{
//迴圈找到HardwareType為cpu
if (computer.Hardware[i].HardwareType == HardwareType.CPU)
{
for (int j = 0; j < computer.Hardware[i].Sensors.Length;j++ )
{
//找到溫度
if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
{
//獲取到cpu核心
str.Append(computer.Hardware[i].Sensors[j].Name);
str.Append("\t");
//這裡就是cpu溫度了
str.Append(computer.Hardware[i].Sensors[j].Value.ToString());
str.Append("\n");
}
}
}
}
Console.WriteLine(str.ToString());