![]() |
externes programm schliessen
wie kann ich denn ein anderes programm aus delphı heraus sauber beenden?
Welche funktion brauche ich dazu? Ich wiii den prozess über dıe prozess id suchen und dann beenden. Einfach den task zu kıllen ist nicht sehr gut. İch habe mıtbekommen, dass es mıt WM_CLOSE gehen soll, allerdings hab eich auch nach langer suche bısher nıx gefunden. könnt ıhr mır da bitte weiterhelfen! gruss heriam |
Re: externes programm schliessen
Hi,
Klappt nicht immer da es ggf. noch Nachfragen vom Programm geben kann zB.: "...Die Aktuellen Dateien speichern..." etc. So gehts.:
Delphi-Quellcode:
// Edit: so ists wohl besser.
// (* ungetested *)
procedure SendCloseTo(wndClass, wndName: PChar); var _hWnd: HWND; begin _hWnd := FindWindow(wndClass, wndName); if _hWnd <> 0 then SendMessage(_hWnd, WM_CLOSE, 0, 0); end; // Aufruf: procedure TFormXYZ.ButtonXClick(...); begin // "Notepad" ist der Fensterklassenname des Notepad-Texteditors // Der Fenstertitel heisst zu anfang genauso, kann sich aber nach // dem speichern ändern. Also nicht verwechseln. ;-) SendCloseTo('Notepad', nil); end; |
Re: externes programm schliessen
Zitat:
|
Re: externes programm schliessen
Ist der name notepad ist das der prozessname ohne die endung ".exe" am schluss?
|
Re: externes programm schliessen
Nein, das ist der Klassenname des Fensters.
|
Re: externes programm schliessen
Zitat:
denn ich weiss ja von vornhınweg ja nicht wie die klassennamen der fenster von externen programmen lauten, die ich schliessen möchte. |
Re: externes programm schliessen
Da musst Du dann ein paar Umwege gehen (EnumThreadWindows fällt mir da spontan ein).
|
Re: externes programm schliessen
Zitat:
Zitat:
Auf Prozesse kann man IMHO nicht mit WM_CLOSE beenden. (aber vill. das Fensterhandle finden..?!) |
Re: externes programm schliessen
würde man mit dem fensterhandle dann auch herausbekommen welche weiteren prozess meine anwendung gestartet hat, um dıesen dann gleıch mıtzubeenden?
also so was: anwendung.exe -> startet -> weitere_anwendung.exe -> usw.... edit: also hier haette ich mal was gefunden, ![]() bei manchen prozessen bekomme ich da einfach eine 0 zurück. wenn ich jetzt mal als beispiel gimp portable von portable apps prüfe, dann werden da zweı prozesse gestartet: zum einen dıe "GimpPortable.exe" und die "gimp-2.4.exe". sobald ich dann aber die beıden prozesse abprüfe, bekkomme ıch nur beı der "gimp-2.4.exe" einen handle zurück. beim anderen ist der handle 0. gruss heriam |
Re: externes programm schliessen
jemand ne ıdee?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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