[C#]取得CPU溫度與序號
1. 問題描述
如何取得 CPU 溫度與型號
補充說明 :
參考 關於 CPU 溫度的取得可參考 < VB.Net 使用 WMI 取得 CPU 溫度 >
由於 Windows 本身並無提供各項硬體溫度的監控方式,因此 WMI 雖然是 Windows 提供的管理服務,但仍然需要硬體支援才能得到所需的資訊。
MSAcpi_ThermalZoneTemperature 顧名思義是透過 Acpi 這個共同管理介面來查詢,因此您的系統必須具備 ACPI Thermal Zone 才有辦法問到,而 ACPI Thermal Zone 其實是 Notebook 設計下的產品,在 PC 系統下並無 ACPI Thermal Zone 的設計。
一般在 PC 上是使用 Win32_TemperatureProbe 進行查詢,但由於 Win32_TemperatureProbe 是直接問 SMBIOS,由 SMBIOS 裡面挖出資料,但 SMBIOS 是否有支援 WMI 是由主機板廠商決定。
也就是說,若主機板廠商有支援 WMI ,便可以使用 Win32_TemperatureProbe 的 CurrentReading 讀到 CPU 溫度。但很不幸的,大多數(幾乎可說是全部)的主機板廠商都沒有支援這項功能。PC若要知道 CPU 溫度,必須要以 C 語言自行實作 Monitor Chip Driver,可參考 http://temperature.myweb.hinet.net/index_en.htm
2. 方法
WMI Windows Management Instrumentation 提供系統、裝置和應用程式資訊,在 .NET 中提供 System.Management 命名空間 取得 WMI 訊息,以下介紹如何取得 CPU 溫度與序號
2.1 使用 ManagementObjectSearcher 類別,使用前必須先將 System.Management 加入參考
2.2 撰寫獲取 CPU 溫度的程式碼
Double CPUtprt = 0;
System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(@"root\WMI", "Select * From MSAcpi_ThermalZoneTemperature");
foreach (System.Management.ManagementObject mo in mos.Get())
{
CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10;
textBox1.Text = ("CPU 溫度 : " + CPUtprt.ToString() + " °C");
}
執行結果
2.3 撰寫獲取 CPU 型號的程式碼
// ManagementObjectSearcher 類別 : 根據指定的查詢擷取管理物件的集合 // 透過查詢語法 SELECT * FROM Win32_Processor 取得所有 Win32_Processor 類別資料 // 可參考 http://msdn.microsoft.com/en-us/library/aa394373(VS.85).aspx // 其中 CPU 型號為 ProcessorId ManagementObjectSearcher moSearch = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"); foreach (ManagementObject mObject in moSearch.Get()) { this.lbCpuID.Items.Add(mObject["ProcessorId"].ToString()); }
執行結果
3. 相關參考與連結
MSDN - VB2008 Express 如何取得電腦的溫度?
MSDN - ManagementObjectSearcher 類別
Windows Management Instrumentation