Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf beenden eines Programms reagieren (https://www.delphipraxis.net/84695-auf-beenden-eines-programms-reagieren.html)

XXcD 20. Jan 2007 10:36


Auf beenden eines Programms reagieren
 
Hallo,
ich habe ein Programm geschrieben und wollte jetzt mal nachfragen ob es möglich ist, darauf zu reagieren wenn ein externes Programm beendet wird. Also ich habe mein Programm minimiert und wenn sagen wir mal der internetexplorer beendet wird soll sich mein Programm maximieren.

TStringlist 20. Jan 2007 14:33

Re: Auf beenden eines Programms reagieren
 
Hallo,

wenn Du externe Programme überwachen willst, dann musst Du ja auf alle Fälle auch ihre Handels kennen. Und wenn Du die schon weißt, dann wäre es wohl das einfachste, z.B. alle 0,5sec mittels der FindWindow-Funktion auch mal nachzufragen, ob sie denn überhaupt noch existieren. Bezüglich der CPU-Belastung dürfte das jedenfalls völlig vernachlässigbar sein.

Eine andere Möglichkeit wäre event. noch per CBTProc (siehe PSDK) nach irgendwelchen Windows Ausschau zu halten, die gerade zerstört werden.

Oder Du versuchst dafür einen globalen Hook einzusetzen, was aber wohl die aufwändigste Lösung wäre.

XXcD 20. Jan 2007 15:27

Re: Auf beenden eines Programms reagieren
 
Kann ich denn vielleicht irgendwie mit fdem task manager überprüfen ob die datei beendet wurde. Der muss ja nur überprüfen ob die anwendung an ist.

Luckie 20. Jan 2007 15:43

Re: Auf beenden eines Programms reagieren
 
Warum so umständlich? Einfach gucken, ob der gesuchte Prozess noch in der Prozessliste auftaucht. Wie man Prozesse auflistet, dürfte hier im Forum oder mit Google zu finden sein.

TStringlist 20. Jan 2007 16:11

Re: Auf beenden eines Programms reagieren
 
@XXcD

Nein, den Taskmanager kann man eigentlich nicht durch ein eigenes Programm dementsprechend befragen (wenigstens nicht das ich wüßte).

Übrigens habe ich oben ein winziges bisschen Unsinn erzählt *ggg*: Die Handle des jeweils zu überwachenden Progs musst Du natürlich für diese Prüfung nicht kennen. Vielmehr wirst Du sie im positiven Fall (dh. wenn das Programm noch läuft) dann von dieser FindWindow-Funktion geliefert bekommen! Bekommst Du stattdessen nur eine 0 (Null) geliefert, dann läuft das Programm eben nicht mehr.

Um diese FindWindow-Funktion nutzen zu können, musst Du dann aber zuerst noch den KlassenNamen und/oder den WindowNamen des jeweiligen Programmes wissen. Letzteres steht für gewöhnlich schon in der Title-Leiste des Windows und für den ClassName sollte man sich am Besten so ein Programm wie SPY++ zulegen. Das ist kostenlos und kann z.B. hier gedownloaded werden.

Wenn Du diese Informationen hast (ClassName und/oder WindowName), dann brauchst Du eigentlich nur noch mehr einen Timer und eine einzige weitere Anweisung, um die von dir gewünschte Information abfragen zu können:

Delphi-Quellcode:
If FindWindow('theWindowClassName','theWindowName') <> 0 then WindowStillExists...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz