GUI und Loop in einem Script

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: GUI und Loop in einem Script

Re: GUI und Loop in einem Script

Post by re1hro » 20 Feb 2020, 05:25

Vielen Dank für die gute Erklärung :-D ... Wenn das Fenster erkannt wird soll er kurz warten bevor auf einen Button geklickt wird bzw bevor das Fenster geschlossen wird. Was ich jetzt noch gern hätte wäre eine Checkbox wo wenn der Haken gesetzt ist die ifwinexist Schleife gestartet wird und wenn der Haken wieder raus is die Schleife für die ifwinexist Erkennung gestoppt wird. Soweit so gut, ich hab die Checkbox und wenn ich den Haken setze läuft die Erkennung los. Wenn ich den Haken aber rausnehme, läuft die Erkennung trotzdem weiter.

Re: GUI und Loop in einem Script

Post by just me » 20 Feb 2020, 04:55

Moin,

ich halte Timer auch für die bessere Wahl, wenn es um regelmäßig zu wiederholenden Code geht. Eine Loop tut es allerdings auch, wenn es nur um genau eine Schleife geht, die im Hintergrund ausgeführt werden soll, während der Rest des Skripts über Fensterroutinen oder Hotkeys gesteuert wird. Sie muss nur genügend "Wartezeiten" enthalten, damit sie durch die Fensterereignisse unterbrochen werden kann. Und wenn die Aufgabe darin besteht, nur ein einziges Fenster zu überwachen, kann das auch so aussehen:

Code: Select all

Gui, Add, Button, x32 y19 w100 h30 gLogistics, Logistics
...
...
Gui, Show, w500 h300, MIKO
Loop
{
   WinWait, ScreenPopup
   WinClose
}
return
Wenn die Schleife vor dem Fenstercode steht, wird der nie erreicht. Und wenn die Schleife irgendwo im 'freien Raum' hinter dem ersten Return steht, wird deren Code nie erreicht.

Außerdem ist Dein Code fehlerhaft:

Code: Select all

loop
{
ifWinExist , ScreenPopup
Sleep, 200
    WinClose
}
Hier wird das Kommando Sleep, 200 nur dann ausgeführt, wenn ifWinExist , ScreenPopup zutrifft. Danach wird in jedem Fall WinClose für das AHK-interne 'zuletzt gefundene Fenster' ausgeführt. Das kann zu überraschenden Ergebnissen führen.

Ich gehe mal davon aus, dass Du das so meinst:

Code: Select all

Loop
{
   IfWinExist, ScreenPopup   ; wenn das Popupfenster existiert ...
      WinClose               ; ... schließe es
   Sleep, 200                ; mach mal Pause
}

Re: GUI und Loop in einem Script

Post by divanebaba » 19 Feb 2020, 23:10

... warum muss man da einen Timer setzen?
Ein Timer hat den großen Vorteil, daß das ausführende Script weiterläuft, während ein Loop das Script anhält, bis die Schleife (Loop) beendet ist.
Timer arbeiten unabhängig - mehrere Timer in einem Script sind wie mehrere gleichzeitig ausführbare "Unterprogramme".
Ist das soweit korrekt oder verzapfe ich wieder Käse? :mrgreen:

Re: GUI und Loop in einem Script

Post by Rohwedder » 19 Feb 2020, 17:36

Das ständige Prüfen, ob ein Fenster auftaucht, übernimmt jetzt der Timer.

Re: GUI und Loop in einem Script

Post by re1hro » 19 Feb 2020, 16:18

Das sieht sehr gut aus :-D aber warum muss man da einen Timer setzen? Nur damit ich das verstehe :-D Achso gerade erst gesehn Loop braucht man da auch nicht? ich dacht Loop dient zum ständigen prüfen ob ein fenster auftaucht...
Danke

Re: GUI und Loop in einem Script

Post by Rohwedder » 19 Feb 2020, 16:02

Hallo,
versuche einmal:

Code: Select all

SetTimer, ScreenPopup, 200
Gui, Add, Button, x32 y19 w100 h30 gLogistics, Logistics
Gui, Add, Button, x32 y59 w100 h30 gSal, Sal
Gui, Add, Button, x32 y100 w100 h30 gSchleck, Schleck
Gui, Add, Text, x150 y5 w150 h20 , Sal Benutzername
Gui, Add, Text, x300 y5 w150 h20 , Passwort
Gui, Add, Edit, x150 y19 w110 h30 vUsersal,
Gui, Add, Edit, x270 y19 w110 h30 vPasssal Password*,
Gui, Add, Text, x150 y85 w90 h20 , Schleck Login
Gui, Add, Text, x300 y85 w90 h20 , Passwort
Gui, Add, Edit, x150 y100 w110 h30 vUserschleck,
Gui, Add, Edit, x270 y100 w110 h30 vPassschleck Password*,
Gui, Show, w500 h300, MIKO
return

Logistics:
GuiControlGet, Usersal
GuiControlGet, Passsal
Run, C:\Program Files (x86)\Vantive32Vsta\vantiv32.exe
Sleep, 1000
ControlClick, Edit1, System Login
Sleep, 200
ControlSetText, Edit1,, System Login
Send %Usersal%
ControlClick, Edit2, System Login
Sleep, 200
Send %Passsal%
Sleep, 200
ControlClick, Login, System Login
Sleep, 12000
Click, 47 37, Open - Individual
Sleep, 700
Click, 84 86, Open - Individual
Sleep, 700
Click, 381 109, Open - Individual
Sleep, 700
Click, 578 128, Open - Individual
Sleep, 700
Click, 694 149, Open - Individual
return

Sal:
GuiControlGet, Usersal
GuiControlGet, Passsal
Run, C:\Program Files (x86)\Vive32Vsta\tiv32.exe
Sleep, 1000
ControlClick, Edit1, System Login
Sleep, 200
ControlSetText, Edit1,, System Login
Send %Usersal%
ControlClick, Edit2, System Login
Sleep, 200
Send %Passsal%
Sleep, 200
ControlClick, Login, System Login
return

Schleck:
Run, "C:\Program Files (x86)\Vive32Vsta\Schleck.exe"
WinWait, Schleck
GuiControlGet, Userschleck
GuiControlGet, Passschleck
Sleep, 300
WinActivate, Schleck
Sleep, 500
Click, 90 97, Schleck
Sleep, 200
ControlClick, Edit2, Schleck
Sleep, 200
ControlSetText, Edit2,, Schleck
Send, %Userschleck%
Sleep, 200
ControlClick, Edit3, Schleck
Send, %Passschleck%
return

ScreenPopup:
ifWinExist , ScreenPopup
    WinClose
Return

GuiClose:
ExitApp

GUI und Loop in einem Script

Post by re1hro » 19 Feb 2020, 14:31

Hallo, ich bin gerade dabei meine ersten Gehversuche mit AHK zu machen und bräuchte jetzt mal eure Hilfe.

Ich habe ein Loop Script was immer ein wiederkehrendes PopUp schließen soll wenn es erscheint. Das funktioniert soweit auch super. Dann habe ich noch ein anderes Script mit einer Gui womit ich verschiedene Programme per Button starten und mich auch gleich einloggen kann. Das funktioniert soweit auch super. Jetzt wollte ich aber das Loop in das GUI Script einfügen damit ich nicht zwei Scripte habe. Wenn ich es oben in der GUI einfüge öffnet sich die GUI nicht und der Loop läuft auch nicht. Wenn ich es unter der GUI einfüge startet zwar die GUI aber der Loop läuft nicht. Wie kann ich beide Scripte in einem vereinen?

Vielen Dank :-D



Code: Select all

Gui, Add, Button, x32 y19 w100 h30 gLogistics, Logistics
Gui, Add, Button, x32 y59 w100 h30 gSal, Sal
Gui, Add, Button, x32 y100 w100 h30 gSchleck, Schleck
Gui, Add, Text, x150 y5 w150 h20 , Sal Benutzername
Gui, Add, Text, x300 y5 w150 h20 , Passwort
Gui, Add, Edit, x150 y19 w110 h30 vUsersal,
Gui, Add, Edit, x270 y19 w110 h30 vPasssal Password*,
Gui, Add, Text, x150 y85 w90 h20 , Schleck Login
Gui, Add, Text, x300 y85 w90 h20 , Passwort
Gui, Add, Edit, x150 y100 w110 h30 vUserschleck,
Gui, Add, Edit, x270 y100 w110 h30 vPassschleck Password*,
Gui, Show, w500 h300, MIKO
return

Logistics:
GuiControlGet, Usersal
GuiControlGet, Passsal
Run, C:\Program Files (x86)\Vantive32Vsta\vantiv32.exe
Sleep, 1000
ControlClick, Edit1, System Login
Sleep, 200
ControlSetText, Edit1,, System Login
Send %Usersal%
ControlClick, Edit2, System Login
Sleep, 200
Send %Passsal%
Sleep, 200
ControlClick, Login, System Login
Sleep, 12000
Click, 47 37, Open - Individual
Sleep, 700
Click, 84 86, Open - Individual
Sleep, 700
Click, 381 109, Open - Individual
Sleep, 700
Click, 578 128, Open - Individual
Sleep, 700
Click, 694 149, Open - Individual
return

Sal:
GuiControlGet, Usersal
GuiControlGet, Passsal
Run, C:\Program Files (x86)\Vive32Vsta\tiv32.exe
Sleep, 1000
ControlClick, Edit1, System Login
Sleep, 200
ControlSetText, Edit1,, System Login
Send %Usersal%
ControlClick, Edit2, System Login
Sleep, 200
Send %Passsal%
Sleep, 200
ControlClick, Login, System Login
return

Schleck:
Run, "C:\Program Files (x86)\Vive32Vsta\Schleck.exe"
WinWait, Schleck
GuiControlGet, Userschleck
GuiControlGet, Passschleck
Sleep, 300
WinActivate, Schleck
Sleep, 500
Click, 90 97, Schleck
Sleep, 200
ControlClick, Edit2, Schleck
Sleep, 200
ControlSetText, Edit2,, Schleck
Send, %Userschleck%
Sleep, 200
ControlClick, Edit3, Schleck
Send, %Passschleck%
return

loop
{
ifWinExist , ScreenPopup
Sleep, 200
    WinClose
}

GuiClose:
ExitApp

Top