Fokus Problem nach dem Starten einer anderen Applikation
-
Hi Leute.
In meiner SDI Anwendung (A1) starte ich durch drücken eines Button eine andere Applikation (A2), die dann im Vordergrund läuft.
WinExec("c:\\Programme\\test.exe", SW_MAXIMIZE); // Aus A1Nach dem Beenden der Applikation A2 verliert aber die Applikation A1 den Fokus.
Wie kann man nach dem Beenden der Applikation A2 den Fokus wieder auf den zuvor gedrückten Button in der Applikation A1 setzen? Gibt es einen ‚Nachricht’ wenn die Applikation wieder im Vordergrund ist, welche man abfangen kann und dan entsprechend den Fokus auf den Button setzen kann?
Franziskus
-
Du könntest die andere Anwendung mit CreateProcess starten und mit WaitForSingleObject warten, bis es beendet wurde. Danach Dein Fenster aktivieren (SetForegroundWindow).
-
Hat das aber nicht zur folge, das A1 wärend dieser Zeit aktiv wartet?
Das möchte ich nicht, da es sein kann, das die Aplikation im Hintergrund Daten verarbeiten muss.
-
Kannst du A2 beeinflussen? Wenn ja, könnte es vor dem Beenden eine Nachricht an A1 zurückschicken. Andernfalls kannst du WaitForSingleObject auch mit Timeout aufrufen und zwischendurch deine eigenen Arbeiten erledigen:
while(!fertig) { ... if(WaitForSingelObject(hp_A2,1)!=WAIT_TIMEOUT) { //A2 ist fertig -> mach weiter } }
-
Nein, ich kann die Anwendung A2 nicht beeinflussen.
Und nachdem die Anwendung A2 läuft, muss die Anwendung A1 immer noch auf Ereignisse reagieren können.
-
Dann warte halt in einem Separaten THread auf die andere Anwendung und schick dann eine Nachricht an deinen Hauptthread, wenn die Anwendung beendet ist ...
-
Gibt es die Möglichkeit nicht ein Event abzufangen, wenn die Applikation wieder im Vordergrund (oder eben wieder sichtbar) ist? Dann könnte man den Fokus neu setzen und gewisse Felder aktualisieren.