AutoIT - laufenden prozess unterbrechen

Hi,
ich habe gestern ein Programm namens AutoIT kennengelernt und habe im Moment viel spaß damit es auszuprobieren. Mein erstes Programm läuft schon , jedoch habe ich 2 probleme.

  1. Wie erstelle ich eine Schleife (loop)
    um einen Befehl zu wiederholen (beliebig oft)
  2. Wie unterbreche ich es wenn es noch in dem loop ist.
    Normalerweise kann ich während z.B. dem „sleep(XX)“ befehl nicht beenden.

Es wäre nett wenn ihr das einfach erklären könntet, sodass ich das auch verstehe.

MfG TheSchnabeltier

Hallo Schnabeltier

für eine unbegrenzte Schleife empfehle ich sonst eine Timer-Funktion zu verwenden.

Mit einem Timer (ein Fenster ist Vorraussetzung), kann man eine Funktion in festen zeitlichen Abständen aufrufen. Und dazwischen werden Nachrichten ganz normal verarbeitet, so dass z.B. auf die Schließaufforderung des Fensters reagiert werden kann.

Ein Beispiel für die Funktion _Timer_SetTimer solltest Du in der gleichnamigen Beispieldatei im Examples\Helpfile Unterverzeichnis von Autoit finden.

Viele Grüße von IchSchwarzAlles

Vielen dank probier ich gleich aus ;D

Quelle: Autoit.de
Getestet: Läuft

Beispiel 1:

#include 
#include 
#Include 
Opt("GUIOnEventMode",1)
;==========================\> GUIstart
$Form1 = GUICreate("Test\_GUI",200,300)
$Button1 = GUICtrlCreateButton("Start",50,120,100,80)
GUICtrlSetOnEvent(-1,"\_Create")
GUISetOnEvent($GUI\_EVENT\_CLOSE,"\_Exit",$Form1)
GUISetState()
;==========================\> GUIend

Global $iStartVar = 0,$dll = DllOpen("user32.dll")


While 1
 Sleep(100)
WEnd

Func \_Create()
 If $iStartVar = 1 Then
 $iStartVar = 0
 GUICtrlSetData($Button1,"Start")
 MsgBox(0,"Pause","Wie der Name schon sagt, hier kannst du eine Pause einfügen!")


 Else
 $iStartVar = 1
 GUICtrlSetData($Button1,"Pause")
 MsgBox(0,"Start","Hier kannst du nun deine gewünschte Aktion ausführen")
 Do 
 Beep(880,100)
 Until \_IsPressed(01,$dll)
 \_Create()
EndIf
EndFunc

Func \_Exit()
 Exit
EndFunc

Beispiel 2:

#include 
#include 
#Include 
Opt("GUIOnEventMode",1)
;==========================\> GUIstart
$Form1 = GUICreate("Test\_GUI",200,300)
$Button1 = GUICtrlCreateButton("Start",50,120,100,80)
GUICtrlSetOnEvent(-1,"\_Create")
GUISetOnEvent($GUI\_EVENT\_CLOSE,"\_Exit",$Form1)
GUISetState()
;==========================\> GUIend

Global $iStartVar = 0,$dll = DllOpen("user32.dll")


While 1
 Sleep(100)
WEnd

Func \_Create()
 If $iStartVar = 1 Then
 $iStartVar = 0
 GUICtrlSetData($Button1,"Start")
 MsgBox(0,"Pause","Wie der Name schon sagt, hier kannst du eine Pause einfügen!")


 Else
 $iStartVar = 1
 GUICtrlSetData($Button1,"Pause")
 MsgBox(0,"Start","Hier kannst du nun deine gewünschte Aktion ausführen")
 Do 
 Beep(880,100)
 Until \_IsPressed(01,$dll)
 \_Create()
EndIf
EndFunc

Func \_Exit()
 Exit
EndFunc

Als Dauer-Schleife geht am Besten eine while-Schleife:
While 1
;Hier die Befehle
WEnd
Läuft ewig weiter.

Beenden lässt sich die Schleife mit:
Exit (Beendet das gesamte Programm)
ExitLoop (Beendet die Schleife. Programm macht mit Befehlen nach der Schleife weiter)

Hallo TheSchnabeltier,
auf deine direkte Frage hast du hier ja schon direkte Antworten erhalten, daher hier noch ein Tipp. Für Fragen zu AutoIt empfehle ich dir das deutsche AutoIt-Forum (www.autoit.de):

Über die Suche kannst du schon viele Antworten finden, da deine Fragen oft nicht erstmalig sind :wink:

Dort gibt es eine deutsche Variante der AutoIt-Help-Datei (chm)

Fragen werden dort sehr kompetent und teilweise rasend schnell beantwortet

Vermutlich kennst du das Forum aber schon, denn ich kann mir nicht vorstellen wie man sich ohne dieses Forum tief in AutoIt einarbeiten kann :smile:

Viele Grüße
Carsten

  1. Programm hart abbrechen über Task-Manager :smile:

  2. Hilfe lesen. In der AutoIt-Hilfe, gleich in der FAQ, Punkt 12.

  3. AutoIt-Forum benutzen für solche Fragen.

Gruß,
Florian

PS: ach ja, das steht da unter Punkt 12:

HotKeySet("^!x", "MyExit")
...
; Rest vom Script
...
Func MyExit()
 Exit
EndFunc 

Hallo,

  1. Wie erstelle ich eine Schleife (loop)
    um einen Befehl zu wiederholen (beliebig oft)

schau doch in der Hilfe unter While, For - To, ContinueLoop, ExitLoop, Do

  1. Wie unterbreche ich es wenn es noch in dem loop ist.
    Normalerweise kann ich während z.B. dem „sleep(XX)“ befehl
    nicht beenden.

Schau dir in der Hilfe unter HotKeySet das Beispiel an:

; Press Esc to terminate script, Pause/Break to "pause"
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ;Shift-Alt-d

;;;; Body of program would go here ;;;;
While 1
 Sleep(100)
WEnd
;;;;;;;;

Func TogglePause()
 $Paused = Not $Paused
 While $Paused
 Sleep(100)
 ToolTip('Script is "Paused"', 0, 0)
 WEnd
 ToolTip("")
EndFunc ;==\>TogglePause

Func Terminate()
 Exit 0
EndFunc ;==\>Terminate

Func ShowMessage()
 MsgBox(4096, "", "This is a message.")
EndFunc ;==\>ShowMessage

Gruß Willi