AGB  ·  Datenschutz  ·  Impressum  







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

Prozess sanft beenden

Ein Thema von stz · begonnen am 1. Mär 2007 · letzter Beitrag vom 22. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#1

Prozess sanft beenden

  Alt 1. Mär 2007, 16:55
Moin moin,
ich möchte mir ein kleines Tool schreiben, dass bestimmte Programme startet und auch wieder beendet. Dazu habe ich CreateProcess und TerminateProcess verwendet. Das funktioniert auch soweit sehr gut, aber ich würde das Programm eigentlich ein wenig liebevoller und sanfter beenden. Dazu bin ich nun auf die Idee gekommen, dass ich an das Hauptfenster der Anwendung eine WM_CLOSE Nachricht senden muss. Nur habe ich ja bloß den Dateinamen, den Thread-Handle und den Prozess-Handle. Wie komme ich den an den Handle des Hauptfensters? Oder gibt es gar eine deutlich bessere Lösung für mein Problem?

Freu mich auf gewohnt gute Vorschläge

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: Prozess sanft beenden

  Alt 1. Mär 2007, 17:30
Schau mal da nach EnumThreadWindows
  Mit Zitat antworten Zitat
C.Schoch

Registriert seit: 2. Jan 2006
Ort: Wüstenrot
235 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Prozess sanft beenden

  Alt 1. Mär 2007, 19:58
Hi,
Wenn du die Jedis instaliert hast kannst du folgende funktionen aus der Unit JCLSysInfo verwenden: GetPidFromProcessName();
GetMainAppWndFromPid();
Tschau Christian
Das System hofft auf Besserung
[Siemens]
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Prozess sanft beenden

  Alt 2. Mär 2007, 16:44
Moin,
Ich hab jetzt ein wenig mit EnumThreadWindows gespielt und das geht auch manchmal. Problem: Ich weiß halt nicht, welches das Hauptfenster ist, wenn zu dem Thread mehr als ein Fenster gehören. Ich werde also diese Idee mal weiter verfolgen:
Zitat von C.Schoch:
Wenn du die Jedis instaliert hast kannst du folgende funktionen aus der Unit JCLSysInfo verwenden: GetPidFromProcessName();
GetMainAppWndFromPid();
Die PrcessID hab ich ja eh schon aus den ProcessInformation von CreateProcess.
besten Dank für die Anregungen!

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Prozess sanft beenden

  Alt 2. Mär 2007, 17:25
Zitat von C.Schoch:
GetMainAppWndFromPid();[/b]
Na dann kannst du doch sofort mit dem was C.Schoch schon geschrieben hat das handle auslesen

denn GetMainAppWndFromPid(); macht imho genau das


mfg phreax
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Prozess sanft beenden

  Alt 2. Mär 2007, 22:50
Zitat von phreax:
Na dann kannst du doch sofort mit dem was C.Schoch schon geschrieben hat das handle auslesen
Das habe ich ja versucht, mit diesem Satz auszudrücken:
Zitat von stz:
Die PrcessID hab ich ja eh schon aus den ProcessInformation von CreateProcess.

Aber auch bei GetMainAppWndFromPid(); gibt es ein Problem: Es gibt Anwendungen, die scheinbar gar kein Hauptfenster haben, sondern nur in der TNA rumlungern. Dem komme ich jetzt bei, indem ich mit EnumThreadWindows alle Fenster durchgehe und an jedes WM_CLOSE sende. Darauf reagieren jetzt fast alle meine Kandidaten. Nur einer weigert sich auch da standhaft...

Was macht Windows denn eigentlich, wenn ich den Computer runterfahre? Da klappt das doch auch irgendwie sinnvoll.

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Prozess sanft beenden

  Alt 2. Mär 2007, 23:34
Tja, Linux macht das so:

Zitat:
sending processes the TERM signal
sending processes the KILL signal
....................
"tilt"
Window machts ähnlich. Schonmal gesehen, wie ein "Anwendung XYZ konnte nicht beendet werden - Abbrechen/Abschießen" Fenster beim Herunterfahren gekommen ist?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Prozess sanft beenden

  Alt 3. Mär 2007, 11:57
Zitat von DGL-luke:
Window machts ähnlich. Schonmal gesehen, wie ein "Anwendung XYZ konnte nicht beendet werden - Abbrechen/Abschießen" Fenster beim Herunterfahren gekommen ist?
genau das meine ich. Kann ich sowas nicht auch an einen bestimmten Prozess senden? Genau diesen Mechanismus muss ich doch auch auslösen können, der erst versucht das Programm nett und freundlich zu beenden und danach den Prozess abschießt, wenn er immer noch da ist.

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Prozess sanft beenden

  Alt 3. Mär 2007, 12:23
Hallo,

beim herunterfahren sendet Windows die Nachrichten WM_QueryEndSession und dann WM_EndSession.
Auf das Beenden von Windows reagieren
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Prozess sanft beenden

  Alt 3. Mär 2007, 12:47
Zitat von bitsetter:
beim herunterfahren sendet Windows die Nachrichten WM_QueryEndSession und dann WM_EndSession.
Auf das Beenden von Windows reagieren
Moin bitsetter,
scheinbar kann man diese Nachricht aber nicht an ein bestimmtes Fenster senden. Das hat herzlich wenig Effekt.
Delphi-Quellcode:
SendMessage(AHandle, WM_ENDSESSION, Integer(True), 0);
//oder
SendMessage(AHandle, WM_QUERYENDSESSION, 0, 0);
Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  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 18:44 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