AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Java-Programme sanft beenden

Ein Thema von Sascha L · begonnen am 5. Apr 2006 · letzter Beitrag vom 5. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#1

Java-Programme sanft beenden

  Alt 5. Apr 2006, 09:36
Hallo,

ich kann eine Anwendung ja entweder sanft beenden oder killen lassen.

Sanft:
PostMessage(AppHandle, wm_close, 1, 1); Kill:
Delphi-Quellcode:
AppKiller := TProcList.Create;
AppKiller.KillProc(filename,5000);
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?

Gruß
Sascha
Sascha
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 11:22
Auch Java-Programme fordern vom Betriebssystem mindestens ein Fenster an (bei SWT sind alle Controls nativ). Du brauchst das Handle des Hauptfensters (Hier im Forum suchenFindWindow) und schickst z.B. WM_CLOSE an das Fenster.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 12:27
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.
Sascha
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 12:54
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).
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 13:33
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!
Sascha
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 13:39
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 13:45
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 MSDN-Library durchsuchenTerminateProcess beendet.

@Sascha: Auch wenn der Fenstertitel nichjt eindeutig ist, die Fensterklasse sollte es sein. Und mit MSDN-Library durchsuchenFindWindow kann man auch ein Fenster nur über die Fensterklasse finden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 13:50
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 13:52
ja und wie verwende ich das dann mit folgendem code?

Delphi-Quellcode:
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;
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.

Daher die Frage, wie kann ich ein Java-Programm sanft beenden?
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: Java-Programme sanft beenden

  Alt 5. Apr 2006, 14:05
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;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr.
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