Thư viện SLG.au3 hỗ trợ tạo biểu đồ đường với GDI
Thư viện _PDH_PerformanceCounters.au3 hỗ trợ lấy thông tin CPU Usage
Cuối cùng là thư viện kèm theo _WinAPI_GetSystemInfo.au3
Các bạn save các thư viện này với đúng tên và đặt chung folder với mã nguồn chính
Mã nguồn
#include "SLG.au3"
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <_PDH_PerformanceCounters.au3>
Opt('GuiOnEventMode', 1)
_PDH_Init()
Local $hPDHQuery,$aCPUCounters,$iTotalCPUs,$hSplash
Local $iCounterValue,$sSplashText,$sPCName="" ; $sPCName="\\AnotherPC"
$hPDHQuery=_PDH_GetNewQueryHandle()
$aCPUCounters=_PDH_GetCPUCounters($hPDHQuery,$sPCName)
$iTotalCPUs=@extended
; successful? Then enter loop
If @error=0 And IsArray($aCPUCounters) Then
; Create baseline & initial sleep between 1st collection and start of 'real' collection
_PDH_CollectQueryData($hPDHQuery)
Sleep(50)
; Start loop
EndIf
Const $cBlue = 0xFF00ACFF, $cGreen = 0xFF00FF00, $cPink = 0xFFF004DE, $cYellow = 0xFFFFFF00
Const $cGray = 0xFFADADAD, $cRed = 0xFFFF0000, $cPurple = 0xFF8000FF, $cOrange = 0xFFFF8000
$GUI = GUICreate("CPU LIVE GRAPH !", 450, 240, -1, -1, -1, $WS_EX_TOPMOST)
GUISetBkColor(0)
$Increments = 200
$Gleft=30
$Gtop=18
$Gwidth=400
$Gheight=200
DemiliterRow($Gleft,$Gtop,$Gwidth,$Gheight)
GUISetOnEvent(-3, '_Exit')
GUISetState()
$Graph1 = _SLG_CreateGraph($GUI, $Gleft, $Gtop, $Gwidth, $Gheight, 0, 100, $Increments,0xFFFF0000,-1,-1,True)
_SLG_SetGridLineColor($Graph1,0xFF5C5C5C)
While 1
_PDH_CollectQueryData($hPDHQuery)
; True means do *not* call _PDH_CollectQueryData for each update. Only once per Query handle is needed
$iCounterValue=_PDH_UpdateCounter($hPDHQuery,$aCPUCounters[$iTotalCPUs-1][1],0,True)
_SLG_SetLineValue($Graph1, $iCounterValue)
_SLG_UpdateGraph($Graph1)
Sleep(100)
WEnd
Func DemiliterRow($Gleft=30,$Gtop=18,$Gwidth=400,$Gheight=200)
for $i=0 to 10
if $i=0 then
GUICtrlCreateLabel(' '&$i*10&' -',$Gleft-25,$Gtop+($Gheight/10)*(10-$i)-8)
else
if 0<$i and $i<10 then
GUICtrlCreateLabel(' '&$i*10&' -',$Gleft-25,$Gtop+($Gheight/10)*(10-$i)-7)
else
GUICtrlCreateLabel($i*10&' -',$Gleft-25,$Gtop+($Gheight/10)*(10-$i)-7)
endif
endif
GUICtrlSetColor(-1,0x00FF00)
Next
GUICtrlCreateGroup("", $Gleft-2, $Gtop-8,$Gwidth+5, $Gheight+10)
GUICtrlCreateGroup("", -99, -99, 1, 1)
EndFunc
Func _Exit()
_PDH_FreeQueryHandle($hPDHQuery)
_PDH_UnInit()
Exit
EndFunc
; ===================================================================================================================
; -------------------- WRAPPER FUNCTION --------------------
; ===================================================================================================================
Func _PDH_GetCPUCounters($hPDHQuery,$sPCName="")
; Strip first '\' from PC Name, if passed
If $sPCName<>"" And StringLeft($sPCName,2)="\\" Then $sPCName=StringTrimLeft($sPCName,1)
; CPU Usage (per processor) (":238\6\(*)" or English: "\Processor(*)\% Processor Time")
Local $aCPUsList=_PDH_GetCounterList(":238\6\(*)"&$sPCName)
If @error Then Return SetError(@error,@extended,"")
; start at element 1 (element 0 countains count), -1 = to-end-of-array
Local $aCPUCounters=_PDH_AddCountersByArray($hPDHQuery,$aCPUsList,1,-1)
If @error Then Return SetError(@error,@extended,"")
Return SetExtended($aCPUsList[0],$aCPUCounters)
EndFunc
; ===================================================================================================================
; -------------------- MAIN PROGRAM CODE --------------------
; ===================================================================================================================
Giao diện chương trình :
Chương trình này mình viết dưới khuôn khổ code mẫu minh họa nên giao diện không được đẹp, các bạn có thể nghiên cứu và tùy biến thêm cho đẹp ^^