Mousemove beenden/pausieren ohne Exit

  • Hallo zusammen,

    Ich bin recht neu im Gebiet AutoIt und es auch überhaupt die einzige Programmiersprache die ich bisher kenne und ein wenig kann, und aus Lust und Laune hab ich ein kleines Programm geschrieben, das den Mauszeiger mit mousemove über den Bildschirm schwirren lässt. Ich habe nun eingebaut, dass das Programm bei einem Druck auf ESC mit _isPressed beendet wird, ich würde aber liebend gerne einfach nur die Mausbewegungen stoppen. Ich weis allerdings nicht wie und in der AutoIt-Hilfe steht auch nichts darüber. Deswegen bin ich im Moment auf eure Hilfe angewiesen.

    Das ist der Teil meines Scripts, der unter Case $Button1 steht:

    [autoit]

    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    EndIf
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then
    Exit
    EndIf
    Next
    MsgBox(0,"Mausspiel","Die Maus wurde " & $zahl & " mal über den Bildschirm bewegt")
    Exit

    [/autoit]

    Danke schon mal für eure Mühen, die hoffentlich bei mir ankommen.

    Einmal editiert, zuletzt von jojot (22. Dezember 2010 um 10:44)

  • ohne dein ganzes Script ist dies nur ein Schuß in's Blaue...

    Spoiler anzeigen
    [autoit]

    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    EndIf
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then ExitLoop
    Next
    MsgBox(0,"Mausspiel","Die Maus wurde " & $zahl & " mal über den Bildschirm bewegt")
    Exit

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hier ist das ganze Script:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    Opt("TrayIconHide",1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Maus ControlPanel", 433, 159, 188, 122)
    $Input2 = GUICtrlCreateInput("", 16, 32, 217, 21)
    $Input1 = GUICtrlCreateInput("", 16, 88, 217, 21)
    $Button1 = GUICtrlCreateButton("Start", 288, 24, 121, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Reset", 288, 56, 121, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Start fieser Modus", 288, 88, 121, 25, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Anzahl", 16, 8, 36, 17)
    $Label2 = GUICtrlCreateLabel("Geschwindigkeit (1 schnell, 100 langsam)", 16, 64, 199, 17)
    $Label3 = GUICtrlCreateLabel("Zum Beenden des Mauszeigers ESC drücken", 16, 128, 258, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button4 = GUICtrlCreateButton("Exit", 288, 120, 121, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    EndIf
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then
    Exit
    EndIf
    Next
    MsgBox(0,"Mausspiel","Die Maus wurde " & $zahl & " mal über den Bildschirm bewegt")
    Exit
    Case $Button2
    GUICtrlSetData($Input1,"")
    GUICtrlSetData($Input2,"")
    Case $Button3
    GUISetState(@SW_HIDE)
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then
    Exit
    EndIf
    Next
    Exit
    Case $Button4
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Mit ExitLoop wird aber auch das ganze Script beendet,zumindest passiert dann das, und das ist ja genau das, was ich nicht will.
    Ihr es auch mal testen:Mausspiel Download

  • ist nicht elegant sollte aber funktionieren...

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    Opt("TrayIconHide",1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Maus ControlPanel", 433, 159, 188, 122)
    $Input2 = GUICtrlCreateInput("", 16, 32, 217, 21)
    $Input1 = GUICtrlCreateInput("", 16, 88, 217, 21)
    $Button1 = GUICtrlCreateButton("Start", 288, 24, 121, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Reset", 288, 56, 121, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Start fieser Modus", 288, 88, 121, 25, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Anzahl", 16, 8, 36, 17)
    $Label2 = GUICtrlCreateLabel("Geschwindigkeit (1 schnell, 100 langsam)", 16, 64, 199, 17)
    $Label3 = GUICtrlCreateLabel("Zum Beenden des Mauszeigers ESC drücken", 16, 128, 258, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button4 = GUICtrlCreateButton("Exit", 288, 120, 121, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    EndIf
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then $i = $zahl
    Next
    MsgBox(0,"Mausspiel","Die Maus wurde " & $zahl & " mal über den Bildschirm bewegt")
    Exit
    Case $Button2
    GUICtrlSetData($Input1,"")
    GUICtrlSetData($Input2,"")
    Case $Button3
    GUISetState(@SW_HIDE)
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then $i = $zahl
    Next
    Exit
    Case $Button4
    Exit
    EndSwitch
    WEnd

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hab ich, also hier sind die Quellcodes, die nicht funktionieren, bzw. bei ESC beendet werden

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    Opt("TrayIconHide",1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Maus ControlPanel", 433, 159, 188, 122)
    $Input2 = GUICtrlCreateInput("", 16, 32, 217, 21)
    $Input1 = GUICtrlCreateInput("", 16, 88, 217, 21)
    $Button1 = GUICtrlCreateButton("Start", 288, 24, 121, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Reset", 288, 56, 121, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Start fieser Modus", 288, 88, 121, 25, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Anzahl", 16, 8, 36, 17)
    $Label2 = GUICtrlCreateLabel("Geschwindigkeit (1 schnell, 100 langsam)", 16, 64, 199, 17)
    $Label3 = GUICtrlCreateLabel("Zum Beenden des Mauszeigers ESC drücken", 16, 128, 258, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button4 = GUICtrlCreateButton("Exit", 288, 120, 121, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    EndIf
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then
    $i = $zahl
    EndIf
    Next
    Case $Button2
    GUICtrlSetData($Input1,"")
    GUICtrlSetData($Input2,"")
    Case $Button3
    GUISetState(@SW_HIDE)
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then
    Exit
    EndIf
    Next
    Exit
    Case $Button4
    Exit
    EndSwitch
    WEnd

    [/autoit][autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    Opt("TrayIconHide",1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Maus ControlPanel", 433, 159, 188, 122)
    $Input2 = GUICtrlCreateInput("", 16, 32, 217, 21)
    $Input1 = GUICtrlCreateInput("", 16, 88, 217, 21)
    $Button1 = GUICtrlCreateButton("Start", 288, 24, 121, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Reset", 288, 56, 121, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Start fieser Modus", 288, 88, 121, 25, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Anzahl", 16, 8, 36, 17)
    $Label2 = GUICtrlCreateLabel("Geschwindigkeit (1 schnell, 100 langsam)", 16, 64, 199, 17)
    $Label3 = GUICtrlCreateLabel("Zum Beenden des Mauszeigers ESC drücken", 16, 128, 258, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button4 = GUICtrlCreateButton("Exit", 288, 120, 121, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    EndIf
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then
    ExitLoop
    EndIf
    Next
    Case $Button2
    GUICtrlSetData($Input1,"")
    GUICtrlSetData($Input2,"")
    Case $Button3
    GUISetState(@SW_HIDE)
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    For $i = 1 To $zahl
    MouseMove(Random(1,@DesktopWidth),Random(1,@DesktopHeight), $speed)
    If _IsPressed("1B") Then
    Exit
    EndIf
    Next
    Exit
    Case $Button4
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • ich wird dir empfehlen mit Funcs zu arbeiten:

    [autoit]


    Case $Button1
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    Else
    Mausspiel()
    EndIf

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

    Func Mausspiel()
    [...]
    If _IsPressed("1B") Then
    Return
    EndIf
    EndFunc

    [/autoit]

    Mit Returns geht das relativ einfach.

  • Ansonsten würde ich Zeile 52 auch einfach in ExitLoop unwandeln. Aber wie schon gesagt, ich würde auch Func's nehmen. Übrigens, If-Anweisungen mit nur einem Befehl, können in eine Zeile gepackt werden ohne EndIf.

    Und

    [autoit]


    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit]


    und

    [autoit]


    Case $Button4
    Exit

    [/autoit]


    kannst du zu einem

    [autoit]


    Case $GUI_EVENT_CLOSE, $Button4
    Exit

    [/autoit]


    machen.


  • Mit Funcs kenn ich mich halt noch gar nicht aus, aber ich probiers mal. Was ich halt nicht verstehe , ist, warum bei exitlopp das Programm beendet wird?

  • ein Gui wird standartmäßig mit ESC beendet ich schau eben wie es ausgeschalten wird.
    hat also nix mit Exitloop zu tun^^


    eventuell hilft dir auch hotkeys
    damit kannste mit der PauseTaste unterbrechen und weiter machen lassen und mit ESC kannste jetzt abbrechen

    Spoiler anzeigen
    [autoit]

    HotKeySet("{pause}", "pause")
    HotKeySet("{ESC}", "ende")
    Global $pause = False, $exit = False

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

    ;DeinScript
    Case $Button1
    $speed = GUICtrlRead($Input1)
    $zahl = GUICtrlRead($Input2)
    $answer1 = MsgBox(4,"Mausspiel","Wirklich starten?")
    If $answer1 = 7 Then
    MsgBox(0,"Mausspiel","Das Programm wird nun beendet")
    Exit
    EndIf
    .
    .
    .

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

    Func ende()
    $exit = True
    EndFunc

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

    Func pause()
    $pause = Not $pause
    While $pause == True
    Sleep(10)
    WEnd
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Kijan (22. Dezember 2010 um 10:32)

  • Also könnte ich auch Ende nehmen oder so, und dann würde es gehen?

    Das hat sich alles geklärt, ich nehm jetzt Ende, und dann geht es auch mit ExitLoop.
    Danke für eure Hilfe.

    PS: Wie wird jetz ein Thema als gelöst markiert?

    Einmal editiert, zuletzt von jojot (22. Dezember 2010 um 10:14) aus folgendem Grund: Update