Entwickler-Ecke

Windows API - Programm beenden


anno - Di 26.08.08 09:58
Titel: Programm beenden
So nun eine weiterre frage:


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 anno


Robert.Wachtel - Di 26.08.08 10:05
Titel: Re: Programm beenden
http://www.google.de/search?q=delphi+postmessage+wm_close


anno - Di 26.08.08 10:14
Titel: Re: Programm beenden
user profile iconRobert.Wachtel hat folgendes geschrieben:
http://www.google.de/search?q=delphi+postmessage+wm_close


nein da finde ich nıx, was sich mit der prozess id erledigen könnte.


delphi10 - Di 26.08.08 11:33


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
wndmain: Hwnd;

wndMain := FindWindow(nil,'Fenstername');
if wndMain <> 0 then
PostMessage(wndmain,WM_QUIT,0,0);


Timosch - Di 26.08.08 14:59

user profile icondelphi10 hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
wndmain: Hwnd;

wndMain := FindWindow(nil,'Fenstername');
if wndMain <> 0 then
PostMessage(wndmain,WM_QUIT,0,0);

Wo kommt denn da die PID vor?
Mal ganz abgesehen davon, dass das nur bei GUI-Programmen geht.
Also mir fällt jetzt nur die Variante mit Task abschießen ein, die du ja nicht sonderlich magst: http://swissdelphicenter.com/de/showcode.php?id=266. Läuft zwar auch über den Dateinamen des Prozesses, aber wenigstens taucht die PID darin auf, also könnte man es wohl umschreiben.


delphi10 - Di 26.08.08 15:18

user profile iconTimosch hat folgendes geschrieben:

Wo kommt denn da die PID vor?
Mal ganz abgesehen davon, dass das nur bei GUI-Programmen geht.
Also mir fällt jetzt nur die Variante mit Task abschießen ein, die du ja nicht sonderlich magst: http://swissdelphicenter.com/de/showcode.php?id=266. Läuft zwar auch über den Dateinamen des Prozesses, aber wenigstens taucht die PID darin auf, also könnte man es wohl umschreiben.


Die schweizer Variante hat leider den Nachteil, daß der Prozess ohne wenn und aber abgeschossen wird. Der Zielprozess bekommt keine Gelegenheit mehr eventuelle Daten zu sichern bzw. einen laufenden SubProzess zu beenden. Da ich gerade vor kurzem dieses Problem lösen mußte, habe ich beide Versionen getestet. Sauber beenden geht IMO nur mit WM_Quit.
cu delphi10