MausMove in Schleife setzten + Abruch

  • Hi,

    folgenden Code müsste in eine Schleife. Allerdings weiß ich nicht genau wie dies bei AutoIt funktioniert.

    DIe x bzw y Koordinaten werden immer um +5 erhöht. Der höchste x Wert ist 900 und der höchste Y Wert ist 700

    Desweiteren lieftert die Funktion delete() ein true oder false zurück. Sobald ein true geliefert wird, soll die Schleife abgebrochen werden.

    Ich hoffe einer kann mir eine kurz Info geben.

    [autoit]

    MouseMove(100,100)
    _delete()
    MouseMove(100,105)
    _delete()
    MouseMove(100,110)
    _delete()
    MouseMove(100,115)
    _delete()
    ....
    MouseMove(100,700)

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

    MouseMove(105,700)
    _delete()
    MouseMove(105,695)
    _delete()
    MouseMove(105,690)
    _delete()
    MouseMove(105,690)
    _delete()

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

    ........
    MouseMove(105,100)

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

    MouseMove(110,100)
    _delete()
    MouseMove(110,105)
    _delete()
    MouseMove(110,110)
    _delete()

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

    .......

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

    MouseMove(110,700)
    _delete()
    MouseMove(115,700)
    _delete()
    ......

    [/autoit]
  • ich hab da mal angefangen..
    mit ner For .. Next Schleife wusste ich nicht wie ich das machen sollte, hab einfach While .. WEnd genommen :D:D

    Spoiler anzeigen
    [autoit]

    HotKeySet("{End}", "_end")

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

    $x = 100
    $y = 100

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

    While 1

    If $y = 100 Then
    Do
    MouseMove($x, $y,1)
    _delete()
    $y += 5
    Until $y = 700
    $x += 5
    If $x = 900 Then $x = 100
    EndIf

    If $y = 700 Then
    Do
    MouseMove($x, $y,1)
    _delete()
    $y -= 5
    Until $y = 100
    $x += 5
    If $x = 900 Then $x = 100
    EndIf

    Sleep(50)

    WEnd

    Func _delete()
    ;kA was du hier brauchst
    EndFunc

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

    Func _end()
    Exit ; ==> "Ende" drücken, um das Script zu beenden
    EndFunc

    [/autoit]

    €dit: habs ausgebessert
    fängt jetzt immer von neu an :D

    Einmal editiert, zuletzt von Fisch (31. Juli 2008 um 14:38)

  • Spoiler anzeigen
    [autoit]

    While 1
    For $x = 100 to 900 Step +5
    For $y =100 to 700 Step +5
    Mousemove($x,$y)
    _delete()
    Next
    Next
    Wend

    [/autoit]

    Funktionierts?

  • das funzt, ja
    ich wusste garnicht, dass man For-Schleifen auf diese weise verschachteln kann
    lol

  • Ich habs grad auch erst mit ner For-Next versucht, bis mir aufgefallen ist,
    dass er mit den Koordinaten abwechselnd steigt und fällt... :p

    Mit der While-Schleife gut gelöst, es fehlt bloß noch die Abfrage auf _delete(),
    Also sowas wir If _delete() Then ExitLoop 2 / _end() o.ä.

    Außerdem geht deine Schleife immer weiter durch und hört nicht auf...
    Er hält nur die max. $y, aber nicht die max. $x ein ;)

    Wie wärs mit
    While $x < 905 ?
    Oder vertu ich mich da jetzt ? :D


    @Taek:
    So hatte ich das auch erst. So fängt der aber bei jedem neuenn $x wieder bei $y = 100 an,
    er will aber von oben nach unten, von unten nach oben, ... usw ! ;)


    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Wär ja sonst auch zu einfach gewesen ;)
    Aber iwie muss das doch auch mit For-Next gehen, oder... ?

    Edit: Ich glaub ich habs: ^^

    Spoiler anzeigen
    [autoit]


    HotKeySet("{End}", "_end")

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

    For $x = 100 To 900 Step +5
    If Mod( $x, 2 ) = 0 Then
    For $y = 100 To 700 Step +5
    MouseMove( $x, $y, 1 )
    If _delete() Then ExitLoop 2
    Next
    Else
    For $y = 700 To 100 Step -5
    MouseMove( $x, $y, 1 )
    If _delete() Then ExitLoop 2
    Next
    EndIf
    Next

    Func _delete()
    ;kA was du hier brauchst
    EndFunc

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

    Func _end()
    Exit ; ==> "Ende" drücken, um das Script zu beenden
    EndFunc

    [/autoit]

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    Einmal editiert, zuletzt von limette (31. Juli 2008 um 14:48)

  • Spoiler anzeigen
    [autoit]


    Global $step_y
    If $y = (100,110,120,...,700) Then $step_y
    Else $step_y = -5
    While 1
    For $x = 100 to 900 Step 5
    For $y =100 to 700 Step $step_y
    Mousemove($x,$y)
    _delete()
    Next
    Next
    Wend

    [/autoit]

    Bin mir nicht sicher, ob ich das die y-Werte in der Klammer einfach nacheinander durch Komma getrennt schreiben kann. Hab momentan keine Möglichkeit zum testen.

    EDIT: kann ich $y schon benutzen? Wird doch erst in der Schleife deklariert... ?(

  • Lol ! :D
    Du hast gekürzt, indem du den Step variabel gesetzt hast,
    ich hab gekürzt, indem ich auf gerade oder ungerade teste xD

    Jetzt noch kombinieren, dann ham wir's ;)

    Edit: öhm, nein eher nicht. So wird auch nur einmal bestimmt, welcher Step gewählt wird,
    du musst aber bei jedem neuen $x wieder wechseln :P
    Außerdem fehlt ein EndIf *penibel-sei* x)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • [autoit]

    HotKeySet ( "{F1}", "ext" )
    For $i = 0 To 700 Step +5
    MouseMove (100,100+$i,2)
    Next
    For $g = 0 to 900 Step +5
    MouseMove (100+$g,100,2)
    Next
    Exit

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

    Func ext()
    Exit
    EndFunc

    [/autoit]

    Ich hab auch was hingegrigt :D

  • Was soll ich nur sagen??

    Ich bin einfach nur verblüfft von der Hilfsbereitschaft hier. Sowas habe ich schon lange nicht mehr erlebt, dass innerhalb einer Stunde so viele Leute Hilfe angeboten haben.

    Der Code von Oscar, ist genau das was ich gesucht habe. Kurz und Knackig.


    Nochmals vielen Dank. Falls ich noch was brauche melde ich mich. :)

    PS. Ist es normal das die Skripte 50% CPU Leistung benötigen?

    • Offizieller Beitrag


    PS. Ist es normal das die Skripte 50% CPU Leistung benötigen?

    Hehe, Du hast scheinbar einen Multi-Core-Prozessor, denn sonst würde das Script 100% Rechenleistung verschlingen. Man kann da natürlich einen Sleep-Befehl einbauen, um den Prozessor zu entlasten, aber dann dauert auch der Script-Ablauf länger. Musst Dich also entscheiden...

  • Bevor ich jetzt nen neuen Thread füreine kleine Sache auf mache, frage ich in meinem nach.

    Ist diese While SChleife mit den 2 Bedingungen richtig?

    [autoit]

    While ($tmp = 0 & $counter2 < 3)
    ...............
    $counter2 = $counter2 + 1
    WEnd

    [/autoit]

    Weil er bei mir nicht mehr aus der Schleife kommt.

  • du musst die beiden bedingungen mit And verbinden

    [autoit]

    While $tmp = 0 and $counter2 < 3
    ...............
    $counter2 = $counter2 + 1
    WEnd

    [/autoit]

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer