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 Gestarteter Windows Explorer (https://www.delphipraxis.net/30526-gestarteter-windows-explorer.html)

gkaeberich 26. Sep 2004 09:57


Gestarteter Windows Explorer
 
Hallo,

wie kann ich von einem Delphi-Programm aus feststellen, ob der Windows Explorer gestartet ist (egal, in welchem Fenster/Ordner der sich gerade befindet) ?

Danke

Günther

maxk 26. Sep 2004 10:00

Re: Gestarteter Windows Explorer
 
Das einfachste, was mir z.Z. einfällt wäre folgendes:
Delphi-Quellcode:
 if FindWindow('CabinetWClass',nil)<>0 then ShowMessage('Offen') else
  ShowMessage('zu');

MathiasSimmack 26. Sep 2004 10:03

Re: Gestarteter Windows Explorer
 
War das nicht "ExploreWClass"? Ich überlege nämlich schon die ganze Zeit. :?

SirThornberry 26. Sep 2004 10:06

Re: Gestarteter Windows Explorer
 
hab grad nachgesehen - bei mir ist es "ExploreWClass"

maxk 26. Sep 2004 10:06

Re: Gestarteter Windows Explorer
 
Zum sichergeben, kann man auch nochmal diesen Code benutzen und prüfen, ob das Handle zu "explorer.exe" gehört.

@MathiasSimmack: Laut Simon Reinhardts Fensterliste ist es CabinetWClass.

// Edit: Vielleicht liegt's an den Systemen ich verwende XP HE.

Nothine 26. Sep 2004 10:07

Re: Gestarteter Windows Explorer
 
bei mir ist es auch "ExploreWClass", grad ausprobiert

MathiasSimmack 26. Sep 2004 10:17

Re: Gestarteter Windows Explorer
 
Zitat:

Zitat von maxk
@MathiasSimmack: Laut Simon Reinhardts Fensterliste ist es CabinetWClass.

1. Du darfst ruhig nur Mathias zu mir sagen. ;)
2. Ich glaube, "CabinetWClass" gibt es auch. Aber das könnte evtl. die Klasse eines anderen Fensters sein (Systemsteuerung?), denn die Netzwerkumgebung hat (obwohl es prinzipiell ja auch ein Explorer-Fenster ist) IMHO auch einen anderen Namen.

maxk 26. Sep 2004 10:40

Re: Gestarteter Windows Explorer
 
Zitat:

Zitat von MathiasSimmack
1. Du darfst ruhig nur Mathias zu mir sagen. ;)

Das finde ich wirklich nett, aber war eh ein Copy&Paste :mrgreen:

Also ich hab jetzt nochmal geguckt. Egal ob Systemsteuerung, Netzwerkumgebung, Laufwerk oder Verzeichnis - bei mir ist es immer CabinetWClass :|

w3seek 26. Sep 2004 13:47

Re: Gestarteter Windows Explorer
 
Am zuverlaessigsten ist es zu pruefen ob GetShellWindow() einen Fensterhandle zurueckliefert. wenn die funktion 0 zurueckgibt, laeuft keine Shell. Der Vorteil ist, dass das auch mit alternativen Shells funktioniert.

maxk 26. Sep 2004 14:10

Re: Gestarteter Windows Explorer
 
Ich glaube es ging hier aber mehr um das Explorerfenster als Dateibrowser. Ansonsten wäre das natürlich der bessere Weg.

gkaeberich 26. Sep 2004 21:39

Re: Gestarteter Windows Explorer
 
Hallo,

vielen Dank - mit dem ExploreWClass funktioniert das bei mir schon recht gut.

Vielleicht kann mir jemand noch dabei helfen, den laufenden Windows-Explorer (als Dateiexplorer gestartet) zu beenden. Evetuell kann es auch sein, dass der Explorer mehrfach geöffnet wurde und in verschiedenen Verzeichnissen steht.

Danke

Günther

scp 26. Sep 2004 22:17

Re: Gestarteter Windows Explorer
 
ExploreWClass - Wenn "Windows-Explorer" über Verknüpfung gestartet wird, oder explorer.exe ohne Parameter
CabinetWClass - Wenn Ordnerinhalt angezeigt wird, z.B. über Arbeitsplatz.

EDIT:
Explorer beenden:
Delphi-Quellcode:
var
  wnd : HWND;
begin
  wnd := FindWindow('ExploreWClass', nil);
  If wnd <> 0 then
  begin
    ShowMessage(IntToStr(wnd));
    PostMessage(wnd, WM_CLOSE, 0, 0);
  end;
end;

MathiasSimmack 27. Sep 2004 05:38

Re: Gestarteter Windows Explorer
 
Zitat:

Zitat von gkaeberich
Vielleicht kann mir jemand noch dabei helfen, den laufenden Windows-Explorer (als Dateiexplorer gestartet) zu beenden. Evetuell kann es auch sein, dass der Explorer mehrfach geöffnet wurde und in verschiedenen Verzeichnissen steht.

Stichwort: [dp]"EnumWindows"[/dp]. Damit "loopst" du durch alle Fenster (nicht mit Prozessen verwechseln!) durch. Von jedem erhältst du den Klassennamen, so dass das Beenden dann bspw. so funktioniert, wie scp zeigt.

maxk 27. Sep 2004 13:19

Re: Gestarteter Windows Explorer
 
Zitat:

Zitat von scp
ExploreWClass - Wenn "Windows-Explorer" über Verknüpfung gestartet wird, oder explorer.exe ohne Parameter
CabinetWClass - Wenn Ordnerinhalt angezeigt wird, z.B. über Arbeitsplatz.

Auf sowas kommt wirklich nur Kleinweich - naja, dann bin ich wenigstens nicht verrückt ;)

gkaeberich 27. Sep 2004 21:14

Re: Gestarteter Windows Explorer
 
Hallo,

ich habe den folgenden Code in mein Programm eingebaut, aber leider bleiben die beiden gestarteten Explorer (die in verschiedenen Verzeichnissen stehen) offen.

if FindWindow ('ExploreWClass',nil) <> 0 then
begin
wnd := FindWindow('ExploreWClass', nil);
If wnd <> 0 then
PostMessage(wnd, WM_CLOSE, 0, 0);
end;

Woran kann das liegen ?

Günther

Christian Seehase 28. Sep 2004 00:31

Re: Gestarteter Windows Explorer
 
Moin Günther,

da ich mal annehme, dass Du kontrolliert hast, dass die PostMessage Zeile überhaupt aufgerufen wird... ;-)

Probier's mal mit WM_SYSCOMMAND und SC_CLOSE.

MathiasSimmack 28. Sep 2004 05:45

Re: Gestarteter Windows Explorer
 
Abgesehen davon wird er mit dem gezeigten Befehl vermutlich nur einen der beiden Explorer schließen (wenn er ihn nicht mehrfach aufruft). Darum ja auch der Hinweis auf "EnumWindows".


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