Creates a timer with the specified time-out value
#include <Timers.au3>
_Timer_SetTimer ( $hWnd [, $iElapse = 250 [, $sTimerFunc = "" [, $iTimerID = -1]]] )
$hWnd | Handle to the window to be associated with the timer. This window must be owned by the calling thread |
$iElapse | [optional] Specifies the time-out value, in milliseconds |
$sTimerFunc | [optional] Function name to be notified when the time-out value elapses |
$iTimerID | [optional] Specifies a timer identifier. If $iTimerID = -1 then a new timer is created If $iTimerID matches an existing timer then the timer is replaced If $iTimerID = -1 and $sTimerFunc = "" then timer will use WM_TIMER events |
Success: | Integer identifying the new timer |
Failure: | 0 |
The callback function is called with the following parameters:
$hWnd, $iMsg, $iIDTimer, $iTime
$hWnd - A handle to the window associated with the timer.
$iMsg - The WM_TIMER (0x113) message.
$iIDTimer - The timer's identifier.
$iTime - The number of milliseconds that have elapsed since the system was started. This is the value returned by the _Date_Time_GetTickCount() function.
Inside the callback function, the _Timer_KillAllTimers() or _Timer_KillTimer() referencing the current $iIDTimer must not be used.
_Timer_GetTimerID, _Timer_KillAllTimers, _Timer_KillTimer
Search SetTimer in MSDN Library.
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <Timers.au3>
#include <WindowsConstants.au3>
Global $g_idMemo, $g_hStatus, $g_idProgress, $g_iPercent = 0, $g_iDirection = 1
_Example_CallBack()
Func _Example_CallBack()
Local $hGUI, $iTimerProgress, $idChange, $iWait = 10, $idState
Local $aParts[3] = [75, 330, -1]
$hGUI = GUICreate("Timers Using CallBack Function(s)", 400, 320)
$g_idMemo = GUICtrlCreateEdit("", 2, 32, 396, 226, BitOR($WS_HSCROLL, $WS_VSCROLL))
GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
$idState = GUICtrlCreateButton("Start Progress Bar", 70, 270, 100, 25)
$idChange = GUICtrlCreateButton("Change", 215, 270, 90, 25)
GUICtrlSetState($idChange, $GUI_DISABLE)
$g_hStatus = _GUICtrlStatusBar_Create($hGUI, $aParts)
_GUICtrlStatusBar_SetText($g_hStatus, "Timers")
_GUICtrlStatusBar_SetText($g_hStatus, @TAB & @TAB & StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC), 2)
$g_idProgress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
GUICtrlSetColor($g_idProgress, 0xff0000)
_GUICtrlStatusBar_EmbedControl($g_hStatus, 1, GUICtrlGetHandle($g_idProgress))
GUISetState(@SW_SHOW)
_Timer_SetTimer($hGUI, 1000, "_UpdateStatusBarClock") ; create timer
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idState
If GUICtrlRead($idState) = "Start Progress Bar" Then
$iTimerProgress = _Timer_SetTimer($hGUI, $iWait, "_UpdateProgressBar") ; create timer
If @error Or $iTimerProgress = 0 Then ContinueLoop
GUICtrlSetData($idState, "Stop Progress Bar")
GUICtrlSetState($idChange, $GUI_ENABLE)
Else
GUICtrlSetState($idChange, $GUI_DISABLE)
_Timer_KillTimer($hGUI, $iTimerProgress)
GUICtrlSetData($idState, "Start Progress Bar")
EndIf
Case $idChange
If $iWait = 10 Then
$iWait = 250
Else
$iWait = 10
EndIf
MemoWrite("Timer for _UpdateProgressBar set at: " & $iWait & " milliseconds")
$iTimerProgress = _Timer_SetTimer($hGUI, $iWait, "", $iTimerProgress) ; reuse timer with different interval
EndSwitch
WEnd
ConsoleWrite("Killed All Timers? " & _Timer_KillAllTimers($hGUI) & @CRLF) ; must be True as the timer to "_UpdateStatusBarClock" have not been killed
GUIDelete()
EndFunc ;==>_Example_CallBack
; call back function
Func _UpdateStatusBarClock($hWnd, $iMsg, $iIDTimer, $iTime)
#forceref $hWnd, $iMsg, $iIDTimer, $iTime
_GUICtrlStatusBar_SetText($g_hStatus, @TAB & @TAB & StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC), 2)
EndFunc ;==>_UpdateStatusBarClock
; call back function
Func _UpdateProgressBar($hWnd, $iMsg, $iIDTimer, $iTime)
#forceref $hWnd, $iMsg, $iIDTimer, $iTime
$g_iPercent += 5 * $g_iDirection
GUICtrlSetData($g_idProgress, $g_iPercent)
If $g_iPercent = 100 Or $g_iPercent = 0 Then $g_iDirection *= -1
If $g_iPercent = 100 Then
GUICtrlSetColor($g_idProgress, 0xff0000)
ElseIf $g_iPercent = 0 Then
GUICtrlSetColor($g_idProgress, 0x0000ff)
EndIf
EndFunc ;==>_UpdateProgressBar
; Write a line to the memo control
Func MemoWrite($sMessage)
GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
EndFunc ;==>MemoWrite
#include <Timers.au3>
Global $g_iMsecs = 0, $g_sResult = '', $g_sCDdrv
_Example_TimeOut()
Func _Example_TimeOut()
$g_sCDdrv = DriveGetDrive("CDROM")
$g_sCDdrv = $g_sCDdrv[1]
Local $hGUI = GUICreate("", 140, 64, -1, -1, 0)
GUICtrlCreateLabel("Insert a CD into the tray", 8, 8, 115, 17)
GUISetState(@SW_SHOW)
Local $iIDtimer = _Timer_SetTimer($hGUI, 1000, "Check_mounted") ; create timer
While $g_sResult = ''
Sleep(200)
WEnd
_Timer_KillTimer($hGUI, $iIDtimer)
MsgBox(0, '', $g_sResult, 5)
ConsoleWrite("Killed All Timers? " & _Timer_KillAllTimers($hGUI) & @CRLF) ; must be False as all timer have already been killed
GUIDelete($hGUI)
EndFunc ;==>_Example_TimeOut
Func Check_mounted($hWnd, $iMsg, $iIDtimer, $iTime)
#forceref $hWnd, $iMsg, $iIDTimer,$iTime
$g_sResult = ''
If FileExists($g_sCDdrv & '\') Then
$g_sResult = DriveGetLabel($g_sCDdrv) & ' inserted' & @CRLF
$g_sResult &= 'on drive ' & $g_sCDdrv
Else
$g_iMsecs += 1000
If $g_iMsecs = 10000 Then
$g_sResult = 'timed out'
EndIf
EndIf
EndFunc ;==>Check_mounted