Search the Community
Showing results for tags 'Timers UDF'.
-
Here is my wrapper for SetTimer and KillTimer APIs. AutoIt already has its own, but I tried to make it as simple as I could. #include-once Global $g_avSimpleTimers = [[0, 0]] Func TimerSet($vFunction, $uInterval) Local $hFunction = DllCallbackRegister($vFunction, "none", "HWND;UINT;UINT_PTR;DWORD") If ($hFunction = 0) Then Return 0 Local $uTimerId = DllCall("user32.dll", "UINT_PTR", "SetTimer", _ "HWND", 0, _ "UINT_PTR", 0, _ "UINT", $uInterval, _ "ptr", DllCallbackGetPtr($hFunction))[0] If ($uTimerId = 0) Then DllCallbackFree($hFunction) Return 0 EndIf ReDim $g_avSimpleTimers[$g_avSimpleTimers[0][0] + 2][2] $g_avSimpleTimers[$g_avSimpleTimers[0][0] + 1][0] = $uTimerId $g_avSimpleTimers[$g_avSimpleTimers[0][0] + 1][1] = $hFunction $g_avSimpleTimers[0][0] += 1 Return $uTimerId EndFunc Func TimerUnset($uTimerId) If ($g_avSimpleTimers[0][0] = 0) Then Return False Local $iCount = $g_avSimpleTimers[0][0] For $i = 1 To $iCount + 1 If ($g_avSimpleTimers[$i][0] = $uTimerId) Then DllCall("user32.dll", "BOOL", "KillTimer", _ "HWND", 0, _ "UINT_PTR", $uTimerId) DllCallbackFree($g_avSimpleTimers[$i][1]) For $j = $i To $iCount - 1 $g_avSimpleTimers[$j][0] = $g_avSimpleTimers[$j + 1][0] $g_avSimpleTimers[$j][1] = $g_avSimpleTimers[$j + 1][1] Next $g_avSimpleTimers[0][0] = $iCount - 1 ReDim $g_avSimpleTimers[$iCount][2] Return True EndIf Next Return False EndFunc Example: #include "Simple Timers.au3" Global $t1 = TimerSet(Foo, 500) Global $t2 = TimerSet("Bar", 1000) MsgBox(0, "", "Check the console.") TimerUnset($t1) MsgBox(0, "", "Check the console again.") TimerUnset($t2) ;Not necessary if you are exiting the script Func Foo($a, $b, $c, $d) ConsoleWrite(">Foo" & @CRLF) EndFunc Func Bar($a, $b, $c, $d) ConsoleWrite("!Bar" & @CRLF) EndFunc Download both UDF and example: