小歐ou | 菜鳥自救會

努力工作,用心學習
文章數 - 1025, 回應數 - 995, 引用數 - 0

每月文章

技術社群

技術部落格

關於我

[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

 

 



posted on 2009/6/21 22:21 我要推薦 | 閱讀數 : 34052 訂閱

關連文章

Feedback

# re: [C#]取得CPU溫度與型號 回覆

大大你好,看到你的例子

讓我受益無窮


不過我想要請問....因為我照打之後

系統說 "不受支援"


請問大大這如何解決呢??


謝謝大大~~
2010/8/2 下午 10:56 | 小豬

# re: [C#]取得CPU溫度與型號 回覆

To 小豬

1. 是程式撰寫過程出現錯誤訊息,還是程式執行時出現錯誤訊息?

2. 作業系統與位元數為何?

2010/8/3 上午 10:12 | 小歐ou

# re: [C#]取得CPU溫度與型號 回覆

TO:小歐ou

1. 程式執行時出現錯誤訊息

2.XP,X86
2010/8/4 下午 11:08 | 小豬

# re: [C#]取得CPU溫度與型號 回覆

http://www.wretch.cc/album/album.php?id=tea20&book=4

這是出問題的情況
2010/8/4 下午 11:44 | 小豬

# re: [C#]取得CPU溫度與型號 回覆

Hi!

下載此檔案跑跑看http://files.dotblogs.com.tw/chou/1008/20108503935395.zip

另外,假如您是要動態CPU溫度值,請參考文章開頭的說明,到

http://temperature.myweb.hinet.net/index_en.htm 下載驅動與範例程式

 

2010/8/5 上午 12:41 | 小歐ou

# re: [C#]取得CPU溫度與型號 回覆

那個程式還是不行跑......不受支援


下面那個範例 我有下載試試....沒什麼問題((不過我不懂她想表示什麼意思= ="



請問大大,我可以怎麼解決"不受支援"這個情況呢??
2010/8/5 下午 09:53 | 小豬

# re: [C#]取得CPU溫度與型號 回覆

To 小豬

1. 是否能提供您電腦目前安裝的 .NET Framework 版本,以及您目前電腦安裝的 Visual Studio 版本

2. 是否能上傳您的程式到免費空間,我下載試試看

2010/8/5 下午 11:46 | 小歐ou

# re: [C#]取得CPU溫度與型號 回覆

1. 3.5版;2008

2. http://www.xun6.com/file/0ecdbc125/WebBrowser+%E7%B7%B4%E7%BF%92.rar.html




麻煩你囉 :D 謝謝你!!!
2010/8/7 上午 02:54 | 小豬

# re: [C#]取得CPU溫度與型號 回覆

To 小豬

1. 查了一下國外網站,關於不受支援的部分,主要是電腦環境問題,想要使用 WMI 查詢 MSAcpi_ThermalZoneTemperature,電腦 ACPI 必須支援溫度查詢才行,因此您的電腦環境可能無法使用

2. 參考 http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/19520825-b1fc-4778-8704-c492124bc029/

2010/8/7 下午 02:43 | 小歐ou

# re: [C#]取得CPU溫度與型號 回覆

先謝謝大大幫我解決這個問題.....

看來是BIOS不支援的問題.....

那可以自己寫一個DLL去支援這項數據嗎??


我主機板是MA770-UD3
2010/8/7 下午 05:00 | 小豬

# re: [C#]取得CPU溫度與型號 回覆

To 小豬

不好意思我沒有寫過 Orz 建議您可以到 MSDN 論壇發問看看http://social.msdn.microsoft.com/Forums/zh-tw/categories/

 

2010/8/8 上午 10:28 | 小歐ou

# re: [C#]取得CPU溫度與型號 回覆

TO 小歐ou

謝謝你這麼熱心的幫我處理問題

實在很感謝......我想真的我這張主機板實在不支援= =

就算昨天下午已經更新BIOS也一樣......


謝謝你唷 小歐ou 大
2010/8/8 上午 11:13 | 小豬

# re: [C#]取得CPU溫度與型號 回覆

我这边试了一下你上面的例子,结果在foreach的时候显示“Not supported”,不知道可有解决办法?

2012/6/13 下午 03:18 | 方同军

# re: [C#]取得CPU溫度與型號 回覆

To 方同军

請確認你的主機板是否有支援

2012/6/13 下午 06:35 | 小歐ou

# re: [C#]取得CPU溫度與型號 回覆

结合网上的资料,应该是我主板不支持,那有没有别的查询方法,可以不用轮询的方式进行实时监控呢?听别人说有个Querywatch什么的,不知道记错了没,但是网上资料很少,也没找到。。

2012/6/14 上午 09:34 |

# re: [C#]取得CPU溫度與型號 回覆

To 方同军

抱歉,我沒有試過喔,建議你到 MSDN 論壇發問看看 :)

2012/6/14 上午 10:05 | 小歐ou

回應

標題
姓名
電子郵件 (將不會被顯示)
個人網頁
內容 
  登入後使用進階評論  
Please add 5 and 4 and type the answer here:

Powered by: