[C#]取得CPU溫度與型號

[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");
            } 

執行結果

 

[C#]CPU溫度.zip

 

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