Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi externes programm schliessen (https://www.delphipraxis.net/119423-externes-programm-schliessen.html)

heriam 26. Aug 2008 09:38


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

turboPASCAL 26. Aug 2008 09:53

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:
// (* 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;
// Edit: so ists wohl besser.

DeddyH 26. Aug 2008 09:54

Re: externes programm schliessen
 
Zitat:

Zitat von turboPASCAL
Der Fenstertitel heisst zu anfang genauso

Bei mir ist das "Unbenannt - Editor" ;)

heriam 26. Aug 2008 09:56

Re: externes programm schliessen
 
Ist der name notepad ist das der prozessname ohne die endung ".exe" am schluss?

DeddyH 26. Aug 2008 10:04

Re: externes programm schliessen
 
Nein, das ist der Klassenname des Fensters.

heriam 26. Aug 2008 10:06

Re: externes programm schliessen
 
Zitat:

Zitat von DeddyH
Nein, das ist der Klassenname des Fensters.

naja aber das kann man dann ja nicht für jede anwendung nutzen.

denn ich weiss ja von vornhınweg ja nicht wie die klassennamen der fenster von externen programmen lauten, die ich schliessen möchte.

DeddyH 26. Aug 2008 10:09

Re: externes programm schliessen
 
Da musst Du dann ein paar Umwege gehen (EnumThreadWindows fällt mir da spontan ein).

turboPASCAL 26. Aug 2008 10:16

Re: externes programm schliessen
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von turboPASCAL
Der Fenstertitel heisst zu anfang genauso

Bei mir ist das "Unbenannt - Editor" ;)

Stimmt. :wall:

Zitat:

Zitat von heriam
Der name notepad ist das der prozessname ohne die endung ".exe" am schluss?

Nein, der Fensterklassenname. Den braucht es.
Auf Prozesse kann man IMHO nicht mit WM_CLOSE beenden. (aber vill. das Fensterhandle finden..?!)

heriam 26. Aug 2008 11:44

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, ganz unten. allerdings klappt das ırgendwie nicht bei jedem prozess.

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

heriam 26. Aug 2008 14:20

Re: externes programm schliessen
 
jemand ne ıdee?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.
Seite 1 von 2  1 2      

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