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 frage zu Programm beenden. (https://www.delphipraxis.net/62091-frage-zu-programm-beenden.html)

Evian 30. Jan 2006 21:20


frage zu Programm beenden.
 
Ich möchte gern alle Instanzen des Firefox beenden.
Bei anderen Programmen habe ich das mit

Delphi-Quellcode:
//Beispiel Notepad
while FindWindow('Notepad',nil)<>0 do
  BEGIN
    SendMessage(FindWindow('Notepad',nil),WM_Syscommand,SC_Close,0);
    Application.ProcessMessages;
  END;
end;
gemacht.

Das Problem an dieser Stelle ist, dass jede Componente auf auf dem Firefox-Fenster "MozillaWindowClass" heißt und er sich regelrecht totsucht dabei. Resultat ist, das Programm sucht zwar ohne ende, aber es werden nur spuradisch Firefox-Fenster geschlossen.

Also meine Frage, kennt wer eine clevere Möglichkeit, alle Instanzen einer Anwendung zubeenden?!

mfg

Evian

SirThornberry 30. Jan 2006 21:22

Re: frage zu Programm beenden.
 
du müsstest zusätzlich mit findwindowex prüfen ob die entsprechenden child-fenster auch die richtigen klassennamen haben.

Evian 30. Jan 2006 21:24

Re: frage zu Programm beenden.
 
was genau macht findwindowex im gegensatz zu findwindow?!

SirThornberry 30. Jan 2006 21:28

Re: frage zu Programm beenden.
 
die Frage ist falsch gestellt. Du sollst nicht findwindowEx anstelle von FindWindow nehmen sondern zusätzlich. Und wenn du in die Hilfe schaust siehst du auch was findwindowex mehr kann. Es findet in Bezug auf einen ParentWindow die Childs. Du kannst also prüfen ob dein gefundenes Firefox-Fenster das richtige ist indem du prüfst ob die richtigen Childs vorhanden sind.

Evian 30. Jan 2006 21:35

Re: frage zu Programm beenden.
 
mh.. ich stelle mich gerade ein wenig blöd an glaube ich. hast Du vielleicht ein klein wenig Beispielcode?! Wäre echt klasse!

Christian Seehase 30. Jan 2006 22:10

Re: frage zu Programm beenden.
 
Moin Evian,

Zitat:

Zitat von Evian
Das Problem an dieser Stelle ist, dass jede Componente auf auf dem Firefox-Fenster "MozillaWindowClass" heißt und er sich regelrecht totsucht dabei.

Warum suchst Du überhaupt nach weiteren Komponenten?
Es müsste doch genügen, wenn Du Dir nur die Top-Level-Fenster mit dem entsprechenden Namen vornimmst. (Hier im Forum suchenEnumWindows)

Um nicht, dummerweise, Fenster zu schliessen, die, zufällig, den gleichen Klassennamen haben, aber nicht zu einer Instanz des von Dir gewünschten Programmes, könntest Du dann noch die Prozess-ID(s) der Prozesse ermitteln, und mit Hilfe von MSDN-Library durchsuchenGetWindowThreadProcessId prüfen, ob ein gefundenes Fenster überhaupt zu einem der Prozesse gehört.


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