AutoIT eine Schleife für mehrere Aktionen

VXCK

Cadet 3rd Year
Registriert
Sep. 2018
Beiträge
47
Hallo zusammen,

und zwar wollte ich fragen, ob es möglich ist, anstatt eine gesamte Schleife oder Teil des Skripts, an einen Punkt zu setzen, für diese einen stellvertretenden Befehl einzugeben? Also dass ich z.B. 10 Zeilen Skript durch einen Verweis auf diese an einer anderen Stelle im Skript ablaufen lassen kann? Ich hoffe, man versteht so einigermaßen, was ich sagen will:freak:

Das hat den Hintergrund, dass diese Passage etwa 70 mal wiederholt wird, sich oft Koordinaten ändern werden und ich dann die Passage nur ein mal anstatt 70 mal überarbeiten muss.

Wär echt mega, wenn mir jemand helfen könnte.

LG, Manu
 
Ja, geht.
Habe eine Kamera Software (Wärmebild-Kamera), welche ein Error-Fenster generiert, sobald die Kamera bei der Installation nicht angeschlossen wurde.
Das Error Fenster erscheint etwa 35 mal & es muß immer auf den Button Ignorieren geklickt werden, bevor es im Skript weitergehen könnte.

Die 'AutoIt Windows Info' starten > Option : Haken bei Freeze entfernen > auf Reiter Visible Text gehen > prüfen ob irgendwelche Werte usw. vom Fenster generiert und ausgelesen werden können.

Bei mir würde das Fenster 'Error', mit dem sichtbaren Text 'Kamera nicht gefunden' den Button 'Ignorieren' wie folgt klicken, solange bis zum Schluß das nächste Dialogfenster kommen würde. Bei mir : Information:
Code:
Do
WinActivate("Error", "Kamera nicht angeschlossen")
ControlClick("Error", "Kamera nicht angeschlossen", "[CLASS:Button; INSTANCE:3]")
Until WinActivate("Information:" )
 
VXCK schrieb:
Hallo zusammen,

und zwar wollte ich fragen, ob es möglich ist, anstatt eine gesamte Schleife oder Teil des Skripts, an einen Punkt zu setzen, für diese einen stellvertretenden Befehl einzugeben? Also dass ich z.B. 10 Zeilen Skript durch einen Verweis auf diese an einer anderen Stelle im Skript ablaufen lassen kann?

Ja, klar geht das!
Nennt sich Funktion bzw. Unterprogramm.
Jetzt musst Du nur noch herausfinden wie man eine Funktion in AutoIT programmiert ;).


HTH

BigNum
 
  • Gefällt mir
Reaktionen: VXCK
Schon mal vielen Dank! Ich glaube, das ist nicht ganz das, was ich benötige.

Mal angenommen ich brauche folgende Passage 70 mal, an verschiedenen Stellen, in meinem Skript:

MouseClick( "left" , 1728, 189 , 1 )
Sleep (1000)
MouseClick( "left" , 1109, 1006 , 1 )
Sleep (1000)
MouseClick( "left" , 338, 908 , 1 )
Sleep(1000)
MouseClick( "left" , 1305, 983 , 1 )
Sleep (1000)
MouseClick( "left" , 232, 96 , 1 )
Sleep (1000)
MouseClick( "left" , 109, 16 , 1 )
Sleep (1000)

Die Koordinaten ändern sich aber täglich. Also würde ich gerne anstatt der Passage, einen Verweis programmieren, dass auf diese eine Passage zurückgegriffen wird, sodass ich die Koordinaten nur in der Passage, aber nicht an den 70 Stellen, an der sie angewandt wird, korrigieren muss.
Ergänzung ()

BigNum schrieb:
Ja, klar geht das!
Nennt sich Funktion bzw. Unterprogramm.
Jetzt musst Du nur noch herausfinden wie man eine Funktion in AutoIT programmiert ;).


HTH

BigNum

Unter Funktion finde ich ziemlich viel Informationen, die nicht soooo anfängerfreundlich aufbereitet sind.
Könntest du das etwas präzisieren, welche Art einer Funktion ich googeln soll? Da gibts ja so viel Befehle, ich blick da einfach nicht durch.
 
Zuletzt bearbeitet:
ryan_blackdrago schrieb:
@ VXCK
Wie sieht das Fenster aus, auf das geklickt werden soll?
Enhält es einen bestimmten Text?
Hat der besagte Punkt eine bestimmte Farbe etc.
Es muß irgendein Alleinstellungsmerkmal und Logik sein, was zum gewünschten Klick führt.

Viel einfacher. Es geht auch kein Fenster auf, es muss nichts erkannt werden und es gibt keine Bedingung. Es soll eine bestimmte Abfolge an Klicks, ähnlich dem Beispiel oben, an den besagten 70 Stellen im Skript eingefügt werden.

Ich versuchs nochmal zu erklären:


1 MouseClick( "left" , 1500, 199 , 1 ) ; Ordner 1 öffnen
2 Sleep (1000)
3
4 MouseClick( "left" , 1728, 189 , 1 )
5 Sleep (1000)
6 MouseClick( "left" , 1109, 1006 , 1 )
7 Sleep (1000)
8 MouseClick( "left" , 338, 908 , 1 )
9 Sleep(1000)
10 MouseClick( "left" , 1305, 983 , 1 )
11 Sleep (1000)
12 MouseClick( "left" , 232, 96 , 1 )
13 Sleep (1000)
14 MouseClick( "left" , 109, 16 , 1 )
15 Sleep (1000)
16
17 MouseClick( "left" , 1700, 199 , 1 ) ; Ordner 2 öffnen
18 Sleep (1000)
19
20 MouseClick( "left" , 1728, 189 , 1 )
21 Sleep (1000)
22 MouseClick( "left" , 1109, 1006 , 1 )
23 Sleep (1000)
24 MouseClick( "left" , 338, 908 , 1 )
25 Sleep(1000)
26 MouseClick( "left" , 1305, 983 , 1 )
27 Sleep (1000)
28 MouseClick( "left" , 232, 96 , 1 )
29 Sleep (1000)
30 MouseClick( "left" , 109, 16 , 1 )
40 Sleep (1000)

Das wäre das Skript ausgeschrieben. Und ich möchte anstatt der Passage, die sich in den Ordnern immer wiederholt, einen Befehlt einfügen, der auf die Passage verweist, sodass ich sie nicht immer wiederholen muss.
Das sollte dann so aussehen:

1 MouseClick( "left" , 1500, 199 , 1 ) ; Ordner 1 öffnen
2 Sleep (1000)
3
4 MouseClick( "left" , 1728, 189 , 1 )
5 Sleep (1000)
6 MouseClick( "left" , 1109, 1006 , 1 )
7 Sleep (1000)
8 MouseClick( "left" , 338, 908 , 1 )
9 Sleep(1000)
10 MouseClick( "left" , 1305, 983 , 1 )
11 Sleep (1000)
12 MouseClick( "left" , 232, 96 , 1 )
13 Sleep (1000)
14 MouseClick( "left" , 109, 16 , 1 )
15 Sleep (1000)
16
17 MouseClick( "left" , 1700, 199 , 1 ) ; Ordner 2 öffnen
18 Sleep (1000)
19
20 Befehlt zur Wiederholung von Zeile 4-15, dann bei 21 fortfahren
21
 
@ VXCK
das nennt sich Funktion. Diese muß deklariert & kann entsprechend innerhalb eingefügt werden:
Code:
;Funktion deklarieren
Func meine_funktion()
send("{DOWN}")
send("{DOWN}")
send("{DOWN}")
send("{DOWN}")
EndFunc

;irgendwas im Programm machen - Teil1
send("{up}")
send("{up}")

;erste Mal Funktion starten
meine_funktion()

;irgendwas im Programm machen - Teil2
send("{left}")
send("{left}")

;Funktion wieder starten
meine_funktion()
 
Ja, mega, ich glaub, so komm ich ans Ziel. Ich geb dir Feedback, das probier ich gleich aus.
 
Moin,

ja, mega, hat geklappt. Vieeeeeeeeeeeeeeeeeeeeeeeeeeeeelen Dank!!!!!!!!!!!!!!!!!!!!! Was komisch ist, wenn ich der Funktion einen kurzen Namen geb, dann funktioniert sie nicht. Also bspw.: Func EE(). Gibts da bestimmte Regeln?

LG, Manu
 
Hast recht, war wahrscheinlich ein anderer Fehler :) Vielen Dank, nochmals, hast mir wirklich verständlich weitergeholfen.
 
Zurück
Oben