在Autoit中實(shí)現(xiàn)VB的Timer控件,用過(guò)VB的人都知道Timer控件,即在一段時(shí)間間隔內(nèi)重復(fù)運(yùn)行一段代碼,此間暫停腳本運(yùn)行,這一點(diǎn)和Autoit的AdlibEnable函數(shù)很相似。但與之不同的是前者可以建立無(wú)數(shù)個(gè)Timer控件,而后者只能AdlibEnable一次。
#Include <Date.au3>
#include <GuiConstants.au3>
GuiCreate("Timer", 124, 99)
$Label_1 = GuiCtrlCreateLabel("Time loading...", 10, 10, 140, 20)
$Label_2 = GuiCtrlCreateLabel("00", 10, 40, 70, 20)
$Label_3 = GuiCtrlCreateLabel("00", 10, 70, 80, 20)
Global $pTimerProc = DLLCallbackRegister("_TimerProc","int" ,"hwnd;uint;uint;dword")
Global $uiTimer = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 1000, "ptr", DllCallbackGetPtr ($pTimerProc))
Global $pTimerProc2 = DLLCallbackRegister("_TimerProc","int" ,"hwnd;uint;uint;dword")
Global $uiTimer2 = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 200, "ptr", DllCallbackGetPtr ($pTimerProc2))
Global $pTimerProc3 = DLLCallbackRegister("_TimerProc","int","hwnd;uint;uint;dword")
Global $uiTimer3 = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 700, "ptr", DllCallbackGetPtr ($pTimerProc3))
GuiSetState()
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $uiTimer[0])
DllCallbackFree ($pTimerProc)
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $uiTimer2[0])
DllCallbackFree ($pTimerProc2)
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $uiTimer3[0])
DllCallbackFree ($pTimerProc3)
Exit
Case Else
;;;
EndSelect
WEnd
Exit
Func _TimerProc($hWnd, $uiMsg, $idEvent, $dwTime)
;$idEvent能分辨是哪個(gè)Timer控件調(diào)用了這個(gè)函數(shù)
;$dwTime表示已開(kāi)機(jī)的時(shí)間
Switch $idEvent
Case $uiTimer[0]
GUICtrlSetData($Label_1,_Now ( ))
Case $uiTimer2[0]
GUICtrlSetData($Label_2,GUICtrlRead($Label_2)+1)
Case $uiTimer3[0]
GUICtrlSetData($Label_3,GUICtrlRead($Label_3)+1)
EndSwitch
EndFunc
聯(lián)系客服