_SetTimer Rückgabewert?

  • Hallo,
    da ich den Rückgabewert der _SetTimer-Funktion als für eine Array verwenden möchte, muss ich wissen ob bei allen Rechner der Rückgabewert der Funktion ähnelt. Also einfach das Script ausführen und das in der Console posten...vielen Dank :)

    [autoit]

    #include <Timers.au3>
    $hGUI = GUICreate("Timers Using CallBack Function(s)", 400, 320)
    GUISetState()
    ConsoleWrite("Wert:"&_Timer_SetTimer($hGUI, 1000, "_UpdateStatusBarClock") &@lf); create timer
    Exit
    func _UpdateStatusBarClock()
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Der TimerID wird immer bei 1001 bleiben, weil es der 1. Timer ist den du definierst.
    Bei nichtverwenden des 4. Parameters der Funktion wird automatisch -1 benutzt und die Timer werden aufwärts ab 1000 nummeriert.
    Du kast aber auch die Timer selber nummerieren dann sind die Werte bei allen Rechnern 100% gleich.

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _Timer_SetTimer
    ; Description ...: Creates a timer with the specified time-out value
    ; Syntax.........: _Timer_SetTimer($hWnd[, $iElapse = 250[, $sTimerFunc = ""[, $iTimerID = -1]]])
    ; Parameters ....: $hWnd - Handle to the window to be associated with the timer.
    ; |This window must be owned by the calling thread
    ; $iElapse - Specifies the time-out value, in milliseconds
    ; $sTimerFunc - Function name to be notified when the time-out value elapses
    ; $iTimerID - 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
    ; Return values .: Success - Integer identifying the new timer
    ; Failure - 0
    ; Author ........: Gary Frost
    ; Modified.......: Squirrely1
    ; Remarks .......:
    ; Related .......: _Timer_KillTimer, _Timer_KillAllTimers, _Timer_GetTimerID
    ; Link ..........: @@MsdnLink@@ SetTimer
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _Timer_SetTimer($hWnd, $iElapse = 250, $sTimerFunc = "", $iTimerID = -1)
    Local $aResult[1] = [0], $pTimerFunc = 0, $hCallBack = 0, $iIndex = $_Timers_aTimerIDs[0][0] + 1
    If $iTimerID = -1 Then ; create a new timer 4. Parameter leer oder -1
    ReDim $_Timers_aTimerIDs[$iIndex + 1][3]
    $_Timers_aTimerIDs[0][0] = $iIndex
    $iTimerID = $iIndex + 1000; Hier wird durchnummeriert
    For $x = 1 To $iIndex
    If $_Timers_aTimerIDs[$x][0] = $iTimerID Then
    $iTimerID = $iTimerID + 1
    $x = 0
    EndIf
    Next
    If $sTimerFunc <> "" Then ; using callbacks, if $sTimerFunc = "" then using WM_TIMER events
    $hCallBack = DllCallbackRegister($sTimerFunc, "none", "hwnd;int;uint_ptr;dword")
    If $hCallBack = 0 Then Return SetError(-1, -1, 0)
    $pTimerFunc = DllCallbackGetPtr($hCallBack)
    If $pTimerFunc = 0 Then Return SetError(-1, -1, 0)
    EndIf
    $aResult = DllCall("user32.dll", "uint_ptr", "SetTimer", "hwnd", $hWnd, "uint_ptr", $iTimerID, "uint", $iElapse, "ptr", $pTimerFunc)
    If @error Or $aResult[0] = 0 Then Return SetError(@error, @extended, 0)
    $_Timers_aTimerIDs[$iIndex][0] = $aResult[0] ; integer identifier
    $_Timers_aTimerIDs[$iIndex][1] = $iTimerID ; timer id
    $_Timers_aTimerIDs[$iIndex][2] = $hCallBack ; callback identifier, need this for the Kill Timer
    Else ; reuse timer
    For $x = 1 To $iIndex - 1
    If $_Timers_aTimerIDs[$x][0] = $iTimerID Then
    If IsHWnd($hWnd) Then $iTimerID = $_Timers_aTimerIDs[$x][1]
    $hCallBack = $_Timers_aTimerIDs[$x][2]
    If $hCallBack <> 0 Then ; call back was used to create the timer
    $pTimerFunc = DllCallbackGetPtr($hCallBack)
    If $pTimerFunc = 0 Then Return SetError(-1, -1, 0)
    EndIf
    $aResult = DllCall("user32.dll", "uint_ptr", "SetTimer", "hwnd", $hWnd, "uint_ptr", $iTimerID, "int", $iElapse, "ptr", $pTimerFunc)
    If @error Or $aResult[0] = 0 Then Return SetError(@error, @extended, 0)
    ExitLoop
    EndIf
    Next
    EndIf
    Return $aResult[0]
    EndFunc ;==>_Timer_SetTimer

    [/autoit]