Bis jetzt konnte man bei einer_Timer_SetTimer-Funtion keine Parameter übergeben. Nun ändert sich das! Mit der folgenden UDF "TimerEx" kann man Arrays, Variablen und sonstige Werte übergeben! Bis zu 5 Parameter sind möglich.
TimerEx.au3
#Include <Timers.au3>
[/autoit] [autoit][/autoit] [autoit]Local $zTimer[1][6]
[/autoit] [autoit][/autoit] [autoit];=============================================================================
; Function: _TimerEx_SetTimer($zWnd,$zTime,$zFunction,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
; Parameter: $zWnd = Handle zu dem Fenster, welches zu dem Timer gehört. Dieses Fenster muss zu dem aufgerufenen Thread gehören
; $zTime = Legt den Timeout Wert in Millisekunden fest
; $zFunction = die zu benachrichtigende Funktion wenn der Timeout Wert verstrichen ist
; $zPar_0 = 1. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_1 = 2. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_2 = 3. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_3 = 4. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_4 = 5. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; Return: Erfolg: Integerkennung des neuen Timers
; Fehler: 0
; Notes: Erweitert die "_Timer_SetTimer"-Funtion mit Parameterübergabe
;=============================================================================
func _TimerEx_SetTimer($zWnd,$zTime,$zFunction,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
$zId = _Timer_SetTimer($zWnd, $zTime, "_TimerEx_Call")
If UBound($zTimer) < $zId-1000 then ReDim $zTimer[$zId-1000][6]
$zTimer[$zId-1001][0] = $zFunction
$zTimer[$zId-1001][1] = $zPar_0
$zTimer[$zId-1001][2] = $zPar_1
$zTimer[$zId-1001][3] = $zPar_2
$zTimer[$zId-1001][4] = $zPar_3
$zTimer[$zId-1001][5] = $zPar_4
return $zId
EndFunc
;=============================================================================
; Function: _TimerEx_SetParameter($zId,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
; Parameter: $zId = ID des Timers, welcher von _TimerEx_SetTimer zurückgegeben wird.
; $zPar_0 = 1. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_1 = 2. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_2 = 3. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_3 = 4. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; $zPar_4 = 5. Parameter (um den aktuelle Wert einer Array/Variable zu übergeben sollte diese in Anführungsstrichen übergeben werden, zb. "$var" )
; Notes: Setzt die Parameter neu!
;=============================================================================
func _TimerEx_SetParameter($zId,$zPar_0=-1,$zPar_1=-1,$zPar_2=-1,$zPar_3=-1,$zPar_4=-1)
$zTimer[$zId-1001][1] = $zPar_0
$zTimer[$zId-1001][2] = $zPar_1
$zTimer[$zId-1001][3] = $zPar_2
$zTimer[$zId-1001][4] = $zPar_3
$zTimer[$zId-1001][5] = $zPar_4
EndFunc
;==============================================================================
; Folgende Funtionen sollten nicht aufgerufen werden!
func _TimerEx_Call($hWnd, $Msg, $iIDTimer, $dwTime)
Select
Case $zTimer[$iIDTimer-1001][1] = -1
Execute($zTimer[$iIDTimer-1001][0] & "()")
Case $zTimer[$iIDTimer-1001][2] = -1
Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&")")
Case $zTimer[$iIDTimer-1001][3] = -1
Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&")")
Case $zTimer[$iIDTimer-1001][4] = -1
Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&","&$zTimer[$iIDTimer-1001][3]&")")
Case $zTimer[$iIDTimer-1001][5] = -1
Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&","&$zTimer[$iIDTimer-1001][3]&","&$zTimer[$iIDTimer-1001][4]&")")
Case Else
Execute($zTimer[$iIDTimer-1001][0] & "("&$zTimer[$iIDTimer-1001][1]&","&$zTimer[$iIDTimer-1001][2]&","&$zTimer[$iIDTimer-1001][3]&","&$zTimer[$iIDTimer-1001][4]&","&$zTimer[$iIDTimer-1001][5]&")")
EndSelect
EndFunc
Spoiler anzeigen
#Include <TimerEx.au3>
[/autoit] [autoit][/autoit] [autoit]$hWnd = GUICreate("Test")
[/autoit] [autoit][/autoit] [autoit]Local $var,$Par = 2, $Array[2] = ["hello",""]
; Als Parameter werden die Variable $var , der Integer e und eine Array übergeben
_TimerEx_SetTimer($hWnd,1000,"_call","$var",$Par,3,"$Array")
while 1
$var += 1
Sleep(100)
wend
func _call($a,$b,$c,$d)
ConsoleWrite($a & "," & $b & "," & $c & "," & $d[0] &@lf)
EndFunc