![]() |
Java-Programme sanft beenden
Hallo,
ich kann eine Anwendung ja entweder sanft beenden oder killen lassen. Sanft:
Delphi-Quellcode:
Kill:
PostMessage(AppHandle, wm_close, 1, 1);
Delphi-Quellcode:
Das Problem ist nun, dass bei Java-Anwendungen (Azureus, BlueJ, etc.) nur das killen funktioniert. Ein sanftes Beenden ist nicht möglich. Daher würde ich gerne den Befehl für das sanfte Beenden (d.h. dass z.B. Speicher-Dialoge, etc. noch erscheinen) bei Java-Applikationen wissen. Kennt da jemand den Code für?
AppKiller := TProcList.Create;
AppKiller.KillProc(filename,5000); Gruß Sascha |
Re: Java-Programme sanft beenden
Auch Java-Programme fordern vom Betriebssystem mindestens ein Fenster an (bei SWT sind alle Controls nativ). Du brauchst das Handle des Hauptfensters (
![]() |
Re: Java-Programme sanft beenden
Das klappt aber nicht, wie ich schon beschrieben habe.
Ich ermittle ja das Fenster-Handle, aber nicht über FindWindow sondern über die Exe-Datei, da ich nur den Dateinamen habe und nicht weiß, wie das Fenster heißt. D.h. ich geh alle Prozesse/Fenster durch und gucke, welches zu der EXE gehört, die ich angegeben habe. Das klappt halt auch mit allen Programmen, nur nicht mit Programmen, die mit JAVA programmiert wurden. |
Re: Java-Programme sanft beenden
Kuck dir mal mit Programmen wie X-Spy oder Spy++ die Fenster an, die das Programm erzeugt. So kommst du zum einen an den Fensternamen und zum anderen siehst du, welche Fenster das Programm besitzt.
Ich schätze mal, du hast das falsche Fenster erwischt, denn ich kann mir nicht vorstellen, warum ein WM_CLOSE nicht funktionieren sollte (Java hin oder her). |
Re: Java-Programme sanft beenden
Es gibt nur ein Fensterhandle und genau das findet er auch, aber ich habe mehrere Java-Programme getestet, und es lässt sich nicht mit dem oben genannten Befehl schließen!
|
Re: Java-Programme sanft beenden
Hm, tut mir leid, dann weiß ich auch nicht weiter.
Aber wenn ich Azureus starte und dann das entsprechende Fenster in der Liste der Tasks beende, so wird das Programm beendet. ich dachte bisher aber immer, der Taskmanager sendet dann ein WM_CLOSE, was er wohl aber nicht tut. |
Re: Java-Programme sanft beenden
Der Taskmanager macht dies in zwei schritten: Erst wird versucht das Programm sanft zu beenden, in dem ein WM_CLOSE an das Hauptfenster geschickt wird. Funktioniert das nicht, wird der Prozess mit
![]() @Sascha: Auch wenn der Fenstertitel nichjt eindeutig ist, die Fensterklasse sollte es sein. Und mit ![]() |
Re: Java-Programme sanft beenden
Ja, kann ich bestätigen, Luckie. Azureus zeigt auch nach einem "sanften" Beenden über den Taskmanager beim Starten die Meldung, dass das Programme das letzte Mal nicht ordnungsgemäß beendet wurde.
|
Re: Java-Programme sanft beenden
ja und wie verwende ich das dann mit folgendem code?
Delphi-Quellcode:
Aber wie du ja selbst schon sagst, killt der Taskmanager bei bedarf auch das Programm, wenn ein sanftes Beenden nicht geklappt hat. Und genau das liegt hier ja vor. Selbst der Taskmanager muss Java-Programme killen, weil ein normales wm_close nicht geht.
function GetWindowHandleByExeName(const AExeName: string): THandle;
var SnapShot: THandle; p: TProcessEntry32; ProcessHandle: THandle; begin Result := 0; WindowHandle := 0; ProcessHandle := 0; p.dwSize := SizeOf(p); SnapShot := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0); try if Process32First(SnapShot, p) then repeat if AnsiLowerCase(AExeName) = AnsiLowerCase(p.szExeFile) then ProcessHandle := p.th32ProcessID; until (ProcessHandle <> 0) or not Process32Next(SnapShot, p); EnumWindows(@MyEnumWindowProc, ProcessHandle); Result := WindowHandle; finally CloseHandle(SnapShot); end; end; Daher die Frage, wie kann ich ein Java-Programm sanft beenden? :( |
Re: Java-Programme sanft beenden
Azureus minimiert die Anwendung ins Tray, wenn Sie die Nachricht WM_CLOSE erhält.
Delphi-Quellcode:
var
wnd: HWND; begin wnd := FindWindow('SWT_Window0','Azureus'); if wnd <> 0 then begin SendMessage(wnd, WM_CLOSE, 0, 0); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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