Funktion Funktioniert nicht Richtig.

  • Guten Abend,

    Ich habe eine Funktion die erst Fertig ist wenn die Maus 10 sekunden lang nicht bewegt wird, aber die Funktioniert nicht Richtig, Funktion kann sich nich selbst beenden.
    Kann mir einer sagen wo der Fehler Liegt.

    Hier mein Code:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", "Start")
    _Prufen_Aktiv()
    MsgBox(0, "", "Ende")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Prufen_Aktiv()
    $i = 0
    $pos = MouseGetPos()

    [/autoit] [autoit][/autoit] [autoit]

    Do

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(1000)
    $pos1 = MouseGetPos()

    $var = WinList()
    For $p = 1 to $var[0][0]
    If $var[$p][0] = "AutoIt Error" Then
    ExitLoop(2)
    EndIf
    Next


    If ($pos[0] <> $pos1[0]) and ($pos[1] <> $pos1[1]) Then
    MsgBox(0, "", $i &" durchgang " &$pos[0], 2)
    _Prufen_Aktiv()
    EndIf

    $i = $i + 1

    Until $i = 10

    MsgBox(0, "", $i &" Fertig ")

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Einmal editiert, zuletzt von doc (14. Juni 2007 um 20:04)

  • Ich frage mich gerade, ob die Funktion auch warten soll wenn die Maus bewegt? also test-fehler->wieder testen oder nur test-fehler->draußen

    blicke irgendwie das Skript net so ganz ich hätte das anderes gelöst

  • Das Script überprüft die Mausbewegung, wenn die maus inerhalb von 10 sekunden bewegt wird, wird die Funktion neu gestartet wenn nicht wird die Funktion Beendet (was nicht Funktioniert).


    $var = WinList()
    For $p = 1 to $var[0][0]
    If $var[$p][0] = "AutoIt Error" Then
    ExitLoop(2)
    EndIf
    Next

    dieser Code bezieht sich auf ein anderes script das im hindergrund läuft.

  • [autoit]

    MsgBox(0, "", "Start")
    _Prufen_Aktiv()
    MsgBox(0, "", "Ende")

    [/autoit][autoit][/autoit][autoit]

    Func _Prufen_Aktiv()

    [/autoit][autoit][/autoit][autoit]

    $i = 0
    $timer = TimerInit()
    $pos = MouseGetPos()

    [/autoit][autoit][/autoit][autoit]

    while 1
    $time = TimerDiff($timer)
    $i = $i +1
    $pos1 = MouseGetPos()

    [/autoit][autoit][/autoit][autoit]

    if $pos[0] <> $pos1[0] or $pos[1] <> $pos1[1] Then
    MsgBox(0, "", $i &" durchgang " &$pos[0], 2)
    _Prufen_Aktiv()
    ElseIf $time >= 10000 and $pos[0] = $pos1[0] and $pos[1] = $pos1[1] Then
    MsgBox(0, "", $i &" Fertig ")
    ExitLoop
    EndIf
    WEnd
    EndFunc

    [/autoit]

    So hätte ichs gemacht.

  • Habs Probiert Funktioniert nicht.

    Die Message "Fertig" Kommt, danach sollte die funktion ja fertig sein aber der rechner läuft die funktion immer und immer wieder ab obwohl ich die Maus nicht bewege.

  • mh ich glaube, wenn du die Funktion neu startest (aus der Funktion herraus) produzierst du eine Endloschleife

  • Stimmt.

    Wenn ich die Funktion starte und die maus nicht Bewege Beendet er das Script.
    Aber sobald die Maus Bewegt wird Funktioniert es nicht mehr.


    Kennt einer ne Lösung dafür ???

  • Habe es jetzt so gelöst.

    Spoiler anzeigen
    [autoit]


    MsgBox(0, "", "Start")

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $a = _Prufen_Aktiv()
    Until $a = 1

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", "Ende")

    Func _Prufen_Aktiv()

    $i = 0
    $timer = TimerInit()
    $pos = MouseGetPos()

    while 1
    $time = TimerDiff($timer)
    $i = $i +1
    $pos1 = MouseGetPos()

    if $pos[0] <> $pos1[0] or $pos[1] <> $pos1[1] Then

    MsgBox(0, "", $i &" durchgang " &$pos[0], 2)
    Return 0

    ElseIf $time >= 10000 and $pos[0] = $pos1[0] and $pos[1] = $pos1[1] Then

    MsgBox(0, "", $i &" Fertig ")
    Return 1
    EndIf
    WEnd
    EndFunc

    [/autoit]