Auf Prozessende eines externen Programms warten

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

HMKchris
Posts: 26
Joined: 03 May 2018, 01:40

Auf Prozessende eines externen Programms warten

03 May 2018, 02:04

Hallo zusammen,

ich programmiere gerade ein AHK-Programm, das unser Warenwirtschaftsprogramm steuern soll. Bei dieser Aufgabe werden erst Adressbereiche aufgerufen und anschließend hierfür Datenpakete erstellt (2 unabhängige Prozesse, aber mit dem geleichen Problem). Dies läuft wie folgt ab:
1. Adressen auswählen und WARTEN bis die Adressselektion fertig ist.
2. Datenpaket anstoßen und WARTEN bis dieses fertig ist.
In keinen der beiden Fällen wird das externe Programm nach dem Prozess beendet, da die Arbeit hiermit im Anschluss fortgeführt wird. Die Beendigung des Programms war in anderen Beiträgen der Indikator für AHK weiter zu machen, was hier aber nicht der Fall ist.

Mein Problem: Wie kann ich in AHK anweisen, dass es Abwartet, bis das zu steuernde Programm mit seinem Prozess fertig ist?

Ich könnte mir theoretisch folgende Lösungen für die Überwachung des Prozesses vorstellen:
1. Das externe Programmfenster wird laufend überprüft ob sich etwas ändert. Während der Prozess ausgeführt wird, ändert sich Programmfenster ja laufend, somit ist dies das Zeichen dass der Prozess noch nicht zu Ende ist. Sollte sich dieses z.B. 3 Sekunden nicht ändern gilt dies als Prozessende und AHK macht weiter.
2. Der Mauszeiger ist während des Prozesses auf „Sanduhr“. Wechselt dieser wieder auf den „Arbeitspfeil“ gilt dies als Prozessende und AHK macht weiter.

Da ich leider noch nicht zu viel Erfahrungen mit AHK habe ist meiner Frage, ob dies umsetzbar ist und natürlich ganz wichtig: WIE?

Ich freue mich auf Rückmeldungen und bedanke mich im Voraus.

Grüße vom Chris
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Auf Prozessende eines externen Programms warten

03 May 2018, 07:23

Umsetzbar? Denke ja. Zuverläßig (mit den von dir gewählten mitteln), wahrscheinlich nur bedingt.
Überprüfe mal die prozessorlast deiner anwendung (via taskmanager).
Geht diese bei "untätigkeit" (eindeutig ermittelbar) herunter?? Dann würde ich dies als indikator nehmen.
Good luck :)

BTW, was ist denn genau mit externem prozess gemeint? Ein webportal?? Eine externe datenbank mit lokalem eingabeinterface??
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Auf Prozessende eines externen Programms warten

03 May 2018, 09:05

Moin,

Du kannst es mit der internen Variablen A_Cursor versuchen. Es ist aber nicht garantiert, dass das zuverlässig funktioniert, weil gelegentlich auch System- oder Hintergrundprozesse den Cursor ändern.

Besser wäre es, wenn Du im Fenster ein Control findest, dass nach Abarbeitung einer Aufgabe in einen eindeutigen Zustand wechselt (Farbe, Text). Wenn das externe Programm ein Statusbar-Control hat, kannst Du das vielleicht abfragen.
HMKchris
Posts: 26
Joined: 03 May 2018, 01:40

Re: Auf Prozessende eines externen Programms warten

04 May 2018, 07:37

Hallo zusammen, erst mal danke für die Rückmeldungen. Ich habe hierzu nach langem basteln 2 Lösungen selbst gefunden, die auch just me vorgeschlagen hatte. 2 Lösungen, da meine beiden Bereiche unterschiedliche Wege benötigten.

Thema 1 = Warten, bis alle Adressen selektiert sind: Hier konnte die den Weg mit dem Mauszeiger verwenden. Während die Adressen ausgegeben werden, wird der Mauszeiger konstant als Sanduhr ("Wait") angezeigt und wechselt anschließend wieder. Dies habe mit folgenden Programm-Code gelöst:

Loop ; ++++ Warteschleife für Adress-Selektion über Mauszeiger
{
Sleep, 1000
if A_Cursor = ("Wait")
continue
} Until A_Cursor <> ("Wait")

Thema 2 = Warten, bis das Datenpaket fertig ist: Hier konnte ich den oben genannten Code nicht verwenden (auch hier wie just me angekündigt). Das Datenpaket dauert bei mir sehr lange, hier "ruckelt" das Programm zwischendurch immer wieder. Und bei jeder dieser Störung ändert sich der Mauszeiger. Blöd, weil dann natürlich das AHK-Programm denkt "it`s my turn" und schön brav wieder los legt. Hier hatte ich aber das Glück dass mein zu steuerndes Programm am Ende des Datenpaketes ein Pop-Up öffnet. Somit konnte ich also die Wartefunktion auf das Pop-Up abstimmen mit folgenden Code:

Loop ; ++++ Warteschleife für Datenpaket über Wartefunktion zum abschließenden Pop-Up
{
Sleep, 10000
if WinExist("NAME-POP-UP-FENSTER")
break
}

Funktioniert wunderbar! Würde mich freuen wenn andere diese Lösung auf für sich entdecken und verwenden können.

Grüße vom Christian

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 7 guests