當前位置:編程學習大全網 - 編程語言 - 獲取CPU的溫度的方法

獲取CPU的溫度的方法

 在內存配置較低的計算機中(比如內存32MB,Windows 98第二版),CPU的占有率是較高的,壹般能夠達到50%,這可能是由於系統需要CPU進行許多的運算模擬來彌補資源的不足。下面是我收集整理獲取CPU溫度的方法,歡迎閱讀。

 作為壹個系統級程序員或者編程愛好者,掌握壹些系統的高級編程技巧是非常有意義的。本文將介紹如何利用壹些高級的編程技巧來實現動態監控。

 雖然Windows 98?系統工具?中的?資源狀況?程序能夠監視CPU的資源占用狀況,但是那些相關的數據卻無法傳遞到我們自己的程序中。為此,筆者用VB 6編寫了壹個具有上述功能的CPU監視軟件,它可以實現對CPU資源狀況的監視並取得有關數據,並且能夠顯示到壹個精致的`圖示窗口中。

 編程原理

 CPU的資源占用情況真正反映在CMOS中,但是如果我們直接從這裏開始編程,那將是壹件非常復雜的工作。幸好,Windows 98已經幫我們做好了這壹步,它的底層技術能夠從CMOS中獲取CPU的資源占用狀況參數並且記錄到註冊表中?HKEY_DYN_DATA\PerfStats\StatData?的分支?KERNEL\CPUUsage?中,通過周期性地讀取該鍵的鍵值,並且將參數傳遞到我們自己制作的監視器界面或者有關變量中,就可以即時獲得並反映出CPU的使用狀況了。

 本程序的關鍵是以通用的方法獲取相關鍵值並反映輸出到自制的動態進度監視器上,為了更有利於觀察、分析,我們將添加壹個簡單的趨勢分析平均線。通過本文,初學者還將能了解如何從註冊表的指定項獲取數據和利用Picture控件實現進度指示器的編程技巧。

 獲取CPU的溫度的方法

 1.設計程序界面

 首先運行VB 6中文版,建立壹個標準的exe工程,將窗體命名為frmmain,borderstyle屬性設為:3-fixed,caption,屬性設置為空;接著添加壹個frame控件frame1?,caption屬性設置為空,再添加picturebox控件pctPrg,前景色為綠色,背景色為淺紅色;最後添加壹個定時器控件timer?,interval設置為100(當然,也可以根據自己的需要設置讀取間隔),enabled設置為true,其他的屬性采用系統的默認值,調整窗體和控件到適當位置和適當大小即可(參見附圖)。

 2.編寫程序代碼,雙擊窗體frmmain並輸入以下代碼

 Option Explicit '變量檢查

 Private Declare Function RegQueryValueEx Lib "advapi32.dll " Alias "RegQueryValueExA " (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

 '獲取壹個指定的註冊表項的設置值

 Private Declare Function RegOpenKey Lib "advapi32.dll " Alias "RegOpenKeyA " (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

 '打開壹個指定的的註冊表項

 Private Declare Function RegCloseKey Lib "advapi32.dll " (ByVal hKey As Long) As Long

 '關閉系統註冊表中的指定項(或指定鍵)

 Private Const REG_DWORD = 4

 Private Const HKEY_DYN_DATA = &&H80000006

 '這兩個常數是讀寫註冊表必須的

 '以上API函數和常數結合能夠實現對註冊表任意指定項的訪問

 Private Avg As Long

 'CPU 資源占用參數平均數

 Private Sum As Long

 'CPU 資源占用參數合計數

 Private Index As Long '統計次數

 '窗體級函數、常數和變量聲明結束

 Private Function GetCPUUsage() As Long

 On Error Resume Next

 '忽略可能產生的錯誤

 Dim Data As Long, Typ As Long, Size As Long

 Dim hKey As Long

 Dim hRet As Long

 hRet = RegOpenKey(HKEY_DYN_DATA, "PerfStats\StatData ", hKey)

 '打開該主鍵

 hRet = RegQueryValueEx(hKey, "KERNEL\CPUUsage ", 0&&, REG_DWORD, Data, 4)

 '讀取主鍵值

 GetCPUUsage = Data

 ' 為自定義函數賦值

 hRet = RegCloseKey(hKey)

 '關閉該主鍵

 End Function

 Private Sub Form_Load()

 '初始化標題和提示信息

 Dim hKey As Long, Data As Long

 App.Title = "CPU監視器 占有率: "

 Me.Caption = App.Title

 '初始化應用程序標題欄

 pctPrg.ToolTipText = "單擊右鍵退出程序! "

 RegOpenKey HKEY_DYN_DATA, "PerfStats\ StartStat ", hKey

 RegQueryValueEx hKey, "KERNEL\CPUUsage ", 0, REG_DWORD, Data, 4

 RegCloseKey hKey

 '打開註冊表的資源監控標識

 End Sub

 Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

 '程序結束前關閉定時器

 Timer.Enabled = False

 End Sub

 Private Sub Form_Unload(Cancel As Integer)

 End '結束程序

 End Sub

 Private Sub pctPrg_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

 '右鍵單擊退出程序

 If Button = 2 Then

 Unload Me

 End If

 End Sub

 Private Sub Timer_Timer()

 '利用定時器周期性地讀取資源狀況

 '本程序每隔0.1秒讀取壹次數據

 Dim tmp As Long ' CPU資源占用狀況參數

 tmp = GetCPUUsage '獲得參數

 Me.Caption = App.Title && FormatPercent(tmp / 100) '

 '在窗體標題欄用百分比數字形式反映占用率

 Sum = Sum + tmp '累加統計

 Index = Index + 1 '次數統計

 Avg = Int(Sum / Index) ' 求平均值

 pctPrg.Cls ' 清除圖示內容

 pctPrg.Line (0, 0)-(tmp, 18), ,&& BF

 '以綠色圖示資源占用狀況

 pctPrg.Line (Avg, 0)-(Avg, 18), &&HFF

 '以深紅色畫出平均線

 pctPrg.Line (Avg + 1, 0)-(Avg + 1, 18), &&HFF

 End Sub

 '程序結束

 通過以上步驟,裝備精良的CPU監視器就制作完成了。

 註意事項

 需要說明的是,在內存配置較低的計算機中(比如內存32MB,Windows 98第二版),CPU的占有率是較高的,壹般能夠達到50%,這可能是由於系統需要CPU進行許多的運算模擬來彌補資源的不足。然而在88MB內存,同樣操作系統的機器上,占有率壹般只有10%。另外,本文主窗體中定時器運行過程函數中調用的FormatPercent函數是VB 6.0新添加的壹個函數,它的作用是將壹個表達式轉化成百分數。用VB 5.0開發的讀者需要采取其他變通方法,以實現監控CPU功能。本程序在Windows 98第二版、VB 6.0中文企業版下測試通過。

?

  • 上一篇:計算機的應用軟件有多少種分類?
  • 下一篇:黃山2022門票多少錢
  • copyright 2024編程學習大全網