![]() |
Fremde Anwendung schließen und auf Ende warten
Hallo!
Also folgendes Problem: Ich schreibe gerade einen Internetupdater für ein Projekt mit mehreren Anwendungen. Um die EXE Dateien der Programme überschreiben zu können, muss ich die EXE ja schließen. Es ist aber in allen Fällen sehr wahrscheinlich, dass diese EXE aber noch geöffnet ist. Ich würde also gerne folgendes machen: Die Anwendung, von der ich den Namen der EXE weiß, würde ich gerne auffordern, dass sie ganz normal geschlossen wird (nicht über TerminateProcess, damit sie Einstellungen und so noch speichern kann). Dies sollte meines Wissens nach mit der Message WM_CLOSE gehen, richtig? Ich weiß allerdings noch nicht sehr viel über die Anwendung von Messages. Wie versende ich diese Nachricht, vor allem woher bekomme ich das Handle der Anwendung? Und als zweites würde ich gerne auch noch darauf warten, bis diese Anwendung auch wirklich geschlossen wurde. Erst dann würde ich mit dem Überschreiben beginnen. Sollte die Anwendung abgestürtzt sein, würde ich es zeitverzögert über TerminateProcess versuchen, dazu habe ich in der Suche bereits einen kleinen Codeschnipsel gefunden. Ich danke euch herzlich! Gruß alias5000 |
Re: Fremde Anwendung schließen und auf Ende warten
es gibt da auch noch ShellExecuteAndWait...
|
Re: Fremde Anwendung schließen und auf Ende warten
Hi!
Shellexecuteandwait hilft hier glaube ich nicht weiter. Damit kann man ein Programm starten und warten bis dieses wieder beendet wurde, bevor es mit dem eigenen Programm weitergeht. Ciao Frederic |
Re: Fremde Anwendung schließen und auf Ende warten
Ja das Problem ist eigentlich, dass die Uranwendung den Updater ausführen wird und der das Urprogramm dann evlt. schließen soll.
Oder mal ne andere konkrete Frage: Wie komme ich an das HNWN von meinem Programm, wenn ich den EXE Namen hab? |
Re: Fremde Anwendung schließen und auf Ende warten
sollte das nicht mit GetModuleHandle der win API gehen?
Link -> ![]() und -> ![]() Grüße Klaus |
Re: Fremde Anwendung schließen und auf Ende warten
ich hab ma sowas am beispiel von notepad gemacht.
vll hilft dir das ja weiter. versucht erst das fenster per WM_CLOSE zu schliessen und wenn das nach nem gewissen timeout nich geklappt hat per TerminateProcess.
Delphi-Quellcode:
var
hWnd, hProcess: THandle; DWResult, PID: Cardinal; begin hWnd := FindWindow('Notepad', nil); if hWnd <> 0 then begin SendMessageTimeout(hWnd, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 6000, DWResult); if IsWindow(hWnd) then begin GetWindowThreadProcessId(hWnd, PID); hProcess := OpenProcess(PROCESS_TERMINATE, False, PID); if hProcess <> 0 then begin TerminateProcess(hProcess, 0); CloseHandle(hProcess); end; end; end; end; |
Re: Fremde Anwendung schließen und auf Ende warten
Danke, euch allen. Ich hab inzwischen etwa sowas, wie von nat bereits hinbekommen. Allerdings hatte ich mich noch nicht mit dem aufs Ende warten so sehr auseinandergesetzt, weil ich da noch was anderes mit einbauen wollte. Im Endeffekt wird es aber auf diesen Code in etwa hinauslaufen.
Vielen Dank! Gruß euer alias5000 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 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