Problem mit While

  • Nabend zusammen.

    Benutze schon zienmlich lange AutoIt für kleine Programme auf der Arbeit.
    Nun komme ich zum ersten mal nicht weiter und nun hoffe ich ihr könnt mir helfen.
    Das Programm ist eigentlich ziemlich einfach und klein.


    Auf der Arbeit benutze ich ein Email Programm was den Cursor ändert wenn eine Email im Eingang ist.
    Ich wollte daher einen Move befehl ausführen der den Posteingang abfährt und sobald eine Email im eingang ist
    (cursor ändert sich) auf die Email klickt.

    [autoit]

    $maus = MouseGetCursor()
    $IDs = StringSplit("AppStarting|Arrow|Cross|Help|IBeam|Icon|No|" & _
    "Size|SizeAll|SizeNESW|SizeNS|SizeNWSE|SizeWE|UpArrow|Wait", "|")

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

    sleep(500)
    MouseMove(76, 615, 0)
    Sleep(500)
    while MouseGetCursor()
    MouseMove(76, 92,20)
    If $maus = 3 Then
    MouseClick("left")
    Else
    Exit
    EndIf
    WEnd

    [/autoit]

    Das Programm führt immer nur diesen Exit Code aus auch wenn der Cursor so ist wie er sein soll :).
    Ohne diese While Schleife funktioniert das Programm.

    Hoffe ihr könnt mir helfen

    Danke.

  • Irgendwie fällt es mir schwer, nachzuvollziehen was dein Script genau tut. Zumindest diese 2 Mousemoves zu vollkommen verschiedenen Stellen sind mir ein Rätsel.

    Ansonsten ist mir aufgefallen, dass du $maus nur am scriptanfang definierst, nicht aber nachdem die Maus bewegt wurde. Liegt da vielleicht der Hund begraben?

  • Ich würd das auch mal vermuten... also:

    [autoit]

    $maus = MouseGetCursor()
    $IDs = StringSplit("AppStarting|Arrow|Cross|Help|IBeam|Icon|No|" & _
    "Size|SizeAll|SizeNESW|SizeNS|SizeNWSE|SizeWE|UpArrow|Wait", "|")

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

    sleep(500)
    MouseMove(76, 615, 0)
    Sleep(500)
    while 1
    $maus = MouseGetCursor()
    MouseMove(76, 92,20)
    If $maus = 3 Then
    MouseClick("left")
    Else
    Exit
    EndIf
    WEnd

    [/autoit]

    Geht's jetzt?

    Alledrings solltest du das MouseMove auch mit in die If-Anweisung packen, sonst kommt man nicht mehr von dem Punkt weg ;) Und dann noch ein Sleep, um denProzessor nicht komplett auszuasten.

  • Vielleicht solltest du while 1 nehmen für eine Endlosschleife, da sich ja der Rückgabewert von MouseGetCourser so verändert, dass es keine Endlosschleife mehr ist. While 1 ist dagegen eine.
    Auch aktualisiert er den Cursor so nicht.

    Also könnte der Skript so aussehen:

    [autoit]


    $IDs = StringSplit("AppStarting|Arrow|Cross|Help|IBeam|Icon|No|" & _
    "Size|SizeAll|SizeNESW|SizeNS|SizeNWSE|SizeWE|UpArrow|Wait", "|")

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

    sleep(500)
    MouseMove(76, 615, 0)
    Sleep(500)
    while 1
    $maus = MouseGetCursor();setzt den aktuellen Cursor
    MouseMove(76, 92,20)
    If $maus = 3 Then
    MouseClick("left")
    Exitloop;beendet die Whileschleife
    Else
    ContinueLoop
    EndIf;führt die Schleife fort
    WEnd

    [/autoit]

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Erste Movebefehl Springt zum Fenster rand.
    Zweiter Movebefehl geht den Posteingang ab.
    Habs eingefügt passiert immer noch nichts.

    Nur mal so, geht das überhaupt mit dem Befehl While ?
    Während der Movebefehl ausgeführt wird soll der den Cursor die ganze zeit abfragen ob er sich verändert bei veränderung sofort auf die Mail klicken

  • Hier zwei Varianten. Probier sie mal aus:

    [autoit]

    MouseMove(76, 615, 0)
    AdlibRegister("_CheckCursor",50)
    MouseMove(76, 92,100)

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

    Func _CheckCursor()
    If MouseGetCursor() = 3 Then
    MouseClick("left")
    AdlibUnRegister("_CheckCursor")
    EndIf
    EndFunc

    [/autoit][autoit]


    ;----- Oder eine mE nach sichere/bessere Variante
    MouseMove(76, 615, 0)
    Do
    If MouseGetCursor() = 3 Then
    MouseClick("left")
    ExitLoop
    EndIf
    MouseMove(MouseGetPos(0),MouseGetPos(1)-1,0)
    Until MouseGetPos(1) < 92

    [/autoit]
  • Der Zweite befehl klapt.
    Jetzt nur noch eins :)
    Wie würde das aussehen wenn ich auf Position 384,173 will.

  • Von welchem punkt aus?

    von diesen MouseMove(446, 254, 0)

    [autoit]

    MouseMove(446, 254, 0)
    Do
    If MouseGetCursor() = 0 Then
    Run("cmd.exe")
    ExitLoop
    EndIf
    MouseMove(384,173,20)
    Until MouseGetPos(1) < 0

    [/autoit]

    habe das jetzt gemacht aber nun klickt der wieder nicht wenn sich der cursor ändert.... -.-
    E* cmd.exe damit ich sehe das was passiert ;) habe hier nicht das email programm was ich auf der arbeit hab

  • Versuchs mal so.

    [autoit]

    MouseMove(446, 254, 0)
    ;~ MouseMove(384, 173, 20)
    Do
    If MouseGetCursor() = 0 Then
    MsgBox(0, "", "Jawohl")
    ExitLoop
    ;~ Else
    ;~ ConsoleWrite(MouseGetPos(0)&","&MouseGetPos(1)&" -> Nein"&@CRLF)
    ;~ EndIf
    MouseMove(MouseGetPos(0) - 3, MouseGetPos(1) - 4, 0) ; verschiebt die Maus 4 pixel nach oben, und 3 pixel nach links
    Until MouseGetPos(0) < 384 And MouseGetPos(1) < 173

    [/autoit]

    Ich hab einfach gerechnet:
    446-384 = 62; also ca. 60 pixel nach links
    254-173 = 81; also ca. 80 pixel nach oben.

    Daher ergab sich dann das 3 pixel nach links und 4 pixel nach oben..