Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi anderes Programm "sanft" beenden (https://www.delphipraxis.net/35181-anderes-programm-sanft-beenden.html)

glkgereon 3. Dez 2004 15:29


anderes Programm "sanft" beenden
 
also, ich hätte gern ein programm das völlig im hintergrund läuft und bestimmte programme "sanft" beendet...

beispiel:
ich brauch zwar quicktime, kann aber den autostart net abstellen

bevor ihr mir sagt wo der key liegt:
ich hab mehr als ein beispiel...

also, wie kann ich programme davon überzeugen, sich zu beenden?
ich will eben net die "thread-abschiess-methode" nehmen...ich bräuchte im prinzip eine funktion die es wie der taskmanager bei "task beenden" macht...

kennt ihr die?

dizzy 3. Dez 2004 15:31

Re: anderes Programm "sanft" beenden
 
Ein WM_QUIT (edit: oder hieß sie WM_CLOSE?) an das Fensterhandle senden müsste doch gehen, oder?

glkgereon 3. Dez 2004 15:34

Re: anderes Programm "sanft" beenden
 
hmm...wie sende ich dem denn eine message?

ausserdem: wie krieg ich das fensterhandle raus?

findwindow will (wenn möglich) ich umgehen, da ich einen task beenden will, und dafür net die ganzen fenstertitel brauchen will :(

dizzy 3. Dez 2004 15:38

Re: anderes Programm "sanft" beenden
 
Zitat:

Zitat von glkgereon
hmm...wie sende ich dem denn eine message?

SendMessage :mrgreen:

Zitat:

Zitat von glkgereon
ausserdem: wie krieg ich das fensterhandle raus?

findwindow will (wenn möglich) ich umgehen, da ich einen task beenden will, und dafür net die ganzen fenstertitel brauchen will :(

Eine andere Möglichkeit ist mir nicht bekannt... :gruebel:

glkgereon 3. Dez 2004 17:36

Re: anderes Programm "sanft" beenden
 
hmm....das wär aber blöd...

weil ich weiss ja net bei sonem quicktime, was da genau oben in der titelleiste drinsteht :(

weiss noch einer nen ausweg?

Christian Seehase 3. Dez 2004 18:03

Re: anderes Programm "sanft" beenden
 
Moin glkgereon,

da könnte Dir MSDN-Library durchsuchenGetWindowModuleFileName vielleicht weiterhelfen.
Ausserdem kann Dir auch Hier im Forum suchenEnumChildWindows helfen eindeutige Bestandteile des Fensters zu finden.

Sollte es mit WM_CLOSE nicht klappen, könnte auch die Kombination WM_SYSCOMMAND/SC_CLOSE funktionieren.

glkgereon 3. Dez 2004 18:12

Re: anderes Programm "sanft" beenden
 
sorry, aber was soll mir GETWINDOWMODULEFILENAME bringen? :gruebel:

und auch die zeite hilft mir net wirklich weiter...

ich brauche eine funktion die mir mit dem Task-Namen das handle raussucht...

Luckie 3. Dez 2004 18:17

Re: anderes Programm "sanft" beenden
 
Das wird mit einer Funktion nicht gemacht sein. Wenn du den Prozess kennst, kannst du mit EnumWindows alle Fenster durchgehen und mit GetWindowThreadID gucken, welches Fenster zu dem Prozess gehört. Dann kannst du an das Fenster ein WM_CLOSE schicken.

Christian Seehase 3. Dez 2004 18:22

Re: anderes Programm "sanft" beenden
 
Moin glkgereon,

Zitat:

Zitat von glkgereon
sorry, aber was soll mir GETWINDOWMODULEFILENAME bringen? :gruebel:

ganz einfach:
Du willst das Fenster eindeutig identifizieren.
Dass liesse sich dann ggf. durch den Namen der zugehörigen EXE machen.

Ausserdem könntest Du, wenn schon der Fenstertitel nicht eindeutig ist, auch noch den Klassennamen auslesen (Hier im Forum suchenGetClassName)

glkgereon 3. Dez 2004 18:28

Re: anderes Programm "sanft" beenden
 
ja, aber ich muss doch den exe-filename eingeben, und net rausbekommen :gruebel:

@Luckie:
(achtung, event Noob-Frage :) )
muss denn jeder prozess/jeder task ein fenster haben?

ich werds mal versuchen...

Luckie 3. Dez 2004 18:35

Re: anderes Programm "sanft" beenden
 
Muss nicht. Aber wenn es kein Fenster hat, dann hast du auch nichts, an das du WM_CLOSE schicken könntest und müsstest auf TerminateProcess zurückgreifen.

glkgereon 3. Dez 2004 18:42

Re: anderes Programm "sanft" beenden
 
hmpff :(

das war eben mein ziel den prozess net abzuschiessen, sondern ihn zu beenden...

weil wenn der abgeschossen wird, wird doch der speicher net freigegeben, oder?

Luckie 3. Dez 2004 18:51

Re: anderes Programm "sanft" beenden
 
Doch wird er.
Zitat:

Remarks
The TerminateProcess function is used to unconditionally cause a process to exit. Use it only in extreme circumstances. The state of global data maintained by dynamic-link libraries (DLLs) may be compromised if TerminateProcess is used rather than ExitProcess.

TerminateProcess initiates termination and returns immediately. This stops execution of all threads within the process and requests cancellation of all pending I/O. The terminated process cannot exit until all pending I/O has been completed or canceled.

Terminating a process causes the following:


All object handles opened by the process are closed.
All threads in the process terminate their execution. Each thread exits when all its pending I/O has been completed or canceled. The process exits after all its threads exit.
The state of the process object becomes signaled, satisfying any threads that had been waiting for the process to terminate. The process object is deleted when the last handle to the process is closed.
The states of all threads of the process become signaled, satisfying any threads that had been waiting for the threads to terminate.
The termination status of the process changes from STILL_ACTIVE to the exit value of the process.
Nur das ist zu beachten:
Zitat:

DLLs attached to the process are not notified that the process is terminating.
Das heißt: Läd dein Prozess eine DLL wird der Referenzcounter der DLL nicht zurück gesetzt. Hat noch ein weitere Prozess die DLL geladen und wird normal beendet und dein Prozess wird abgeschossen, wird die DLL nicht entladen, da der ReferenzCount noch bei 1 ist.

glkgereon 3. Dez 2004 18:54

Re: anderes Programm "sanft" beenden
 
und bei sachen wie quicktime wird das wohl der fall sein, das dlls im spiel sind....

dann halt net


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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