Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mit der ProcessID (PID) an das WindowHandle kommen? (https://www.delphipraxis.net/82783-mit-der-processid-pid-das-windowhandle-kommen.html)

Doktor Ruff 19. Dez 2006 10:13


Mit der ProcessID (PID) an das WindowHandle kommen?
 
Hi,

ich habe folgendes Problem. Ich starte mit Hilfe einer Delphi-Anwendung mehrere Programme (CreateProcess). Nun will ich diese beenden. Das habe ich vorher mit
Delphi-Quellcode:
TerminateProcess(ProcInfo.hProcess,0);
gemacht.

Nur ist das Problem, dass die gestarteten Prozesse "hart" beendet werden. Sprich deren eigene "Schließen"-Funktion wird nicht aufgerufen. Daher bräuchte ich eine Möglichkeit wie man anhand der PID an das WindowHandle kommt, damit ich mit "SendMessage" ein "Close" an die Anwendung schicken kann. "FindWindow" ist keine Lösung, da sich der Fenstertitel ändern kann. Ich hoffe mir kann geholfen werden.

Grüße

Der Doktor

Luckie 19. Dez 2006 10:24

Re: Mit der ProcessID (PID) an das WindowHandle kommen?
 
Hol dir mit EnumWindows alle Fenster, dann zu jedem Fenster die ProzessID mit GetWindowThreadProcessId und vergleichst die mit der ProzessID, die du hast. Problem: Ein Prozess kann mehrere Fenster haben.

Doktor Ruff 19. Dez 2006 10:33

Re: Mit der ProcessID (PID) an das WindowHandle kommen?
 
Zitat:

Zitat von Luckie
Hol dir mit EnumWindows alle Fenster, dann zu jedem Fenster die ProzessID mit GetWindowThreadProcessId und vergleichst die mit der ProzessID, die du hast. Problem: Ein Prozess kann mehrere Fenster haben.

Ah sehr gute Idee. Das mit den mehreren Fenstern könnte natürlich ein Problem werden. Ich versuch es mal mit deiner Idee hinzubekommen, danke.

Doktor Ruff 19. Dez 2006 11:11

Re: Mit der ProcessID (PID) an das WindowHandle kommen?
 
Naja mit der Funktion geht es wohl doch nicht. Die Prozesse die ich starte sind zur Trayleiste minimiert. Laut diversen Forumseinträgen liefert die Funktion nur Fenster zurück, die wirklich sichtbar sind im Taskmanager.

Ich könnte noch mit dem EXE-Namen dienen, aber da wüsste ich jetzt nicht wie man dadurch an das Fensterhandle kommt.

Vielleicht kann man auch die Anwendungen kurz vor dem Schließen maximieren aber dafür müsste ich ja auch irgendwie an die heran kommen.

Christian Seehase 19. Dez 2006 12:39

Re: Mit der ProcessID (PID) an das WindowHandle kommen?
 
Moin Ruff,

Zitat:

Zitat von Doktor Ruff
Laut diversen Forumseinträgen liefert die Funktion nur Fenster zurück, die wirklich sichtbar sind im Taskmanager.

Wenn Du EnumWindows meinst:
Die sollte Dir auch unsichtbare Fenster zurückliefern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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