![]() |
Prozess sanft beenden
Moin moin,
ich möchte mir ein kleines Tool schreiben, dass bestimmte Programme startet und auch wieder beendet. Dazu habe ich CreateProcess und TerminateProcess verwendet. Das funktioniert auch soweit sehr gut, aber ich würde das Programm eigentlich ein wenig liebevoller und sanfter beenden. Dazu bin ich nun auf die Idee gekommen, dass ich an das Hauptfenster der Anwendung eine WM_CLOSE Nachricht senden muss. Nur habe ich ja bloß den Dateinamen, den Thread-Handle und den Prozess-Handle. Wie komme ich den an den Handle des Hauptfensters? Oder gibt es gar eine deutlich bessere Lösung für mein Problem? Freu mich auf gewohnt gute Vorschläge :wink: Gruß Malte |
Re: Prozess sanft beenden
Schau mal da nach EnumThreadWindows
|
Re: Prozess sanft beenden
Hi,
Wenn du die Jedis instaliert hast kannst du folgende funktionen aus der Unit JCLSysInfo verwenden: GetPidFromProcessName(); GetMainAppWndFromPid(); |
Re: Prozess sanft beenden
Moin,
Ich hab jetzt ein wenig mit EnumThreadWindows gespielt und das geht auch manchmal. Problem: Ich weiß halt nicht, welches das Hauptfenster ist, wenn zu dem Thread mehr als ein Fenster gehören. Ich werde also diese Idee mal weiter verfolgen: Zitat:
besten Dank für die Anregungen! :dp: Gruß Malte |
Re: Prozess sanft beenden
Zitat:
denn GetMainAppWndFromPid(); macht imho genau das ;) mfg phreax |
Re: Prozess sanft beenden
Zitat:
Zitat:
Aber auch bei GetMainAppWndFromPid(); gibt es ein Problem: Es gibt Anwendungen, die scheinbar gar kein Hauptfenster haben, sondern nur in der TNA rumlungern. Dem komme ich jetzt bei, indem ich mit EnumThreadWindows alle Fenster durchgehe und an jedes WM_CLOSE sende. Darauf reagieren jetzt fast alle meine Kandidaten. Nur einer weigert sich auch da standhaft... Was macht Windows denn eigentlich, wenn ich den Computer runterfahre? Da klappt das doch auch irgendwie sinnvoll. Gruß Malte |
Re: Prozess sanft beenden
Tja, Linux macht das so:
Zitat:
|
Re: Prozess sanft beenden
Zitat:
Gruß Malte |
Re: Prozess sanft beenden
Hallo,
beim herunterfahren sendet Windows die Nachrichten WM_QueryEndSession und dann WM_EndSession. ![]() |
Re: Prozess sanft beenden
Zitat:
scheinbar kann man diese Nachricht aber nicht an ein bestimmtes Fenster senden. Das hat herzlich wenig Effekt. :gruebel:
Delphi-Quellcode:
Gruß
SendMessage(AHandle, WM_ENDSESSION, Integer(True), 0);
//oder SendMessage(AHandle, WM_QUERYENDSESSION, 0, 0); Malte |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz