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 Explorerfenster schließen (https://www.delphipraxis.net/48590-explorerfenster-schliessen.html)

jfheins 27. Jun 2005 19:48


Explorerfenster schließen
 
Ich möchte gerne ein Explorerfenster schließen, also z.B. Eigene Dateien.

Falls es was ausmacht: Links, die Ordnerstruktur ist aktiviert, und er befindet sich in einem Laufwerk (glaube ich)

Ich habe es bereits mit div. Mesages wie z.B. WM_CLOSE, SC_CLOSE, WM_DESTROY, WM_QUIT oder auch TerminateProcess() probiert, aber einzig bei WM_DESTROY hat sich was getan, und zwar ist der Ornerinhalt verschwunden, (Control destroyed ?) und der Explorer ist abgestürtzt.

Ich habe XP SP2, es muss auch nur auf XP funktionieren.


Ich habe das Fenster selbst mit RunProcess ins Leben gerufen,
was ich hätte, um das Fenster zu identifizieren,
wäre einerseits die ProcessID, zur Not hät' ich aber auch ein Handle da ...

Christian Seehase 27. Jun 2005 19:54

Re: Explorerfenster schließen
 
Moin Julius,

bist Du Dir wirklich sicher, dass Du die Message(s) an das Hauptfenster geschickt hast?
Das solltest Du besser noch einmal prüfen.

jfheins 27. Jun 2005 19:58

Re: Explorerfenster schließen
 
Zumindest stimmt das Handle, das mir WinSpy für das Hauptfenster anzeigt mit dem überein, an das ich die Messages sende ...

(Ausprobiert mit Quit + Close > nichts :( )

Christian Seehase 27. Jun 2005 20:30

Re: Explorerfenster schließen
 
Moin Julius,

seltsam.
Wenn Du WM_DESTROY schickst geht ein Teil verloren, was für mich bedeutet, dass es wohl nicht das richtige Handle sein kann.
Ohne ein bisschen Code kann ich jetzt nur noch raten.

jfheins 27. Jun 2005 20:35

Re: Explorerfenster schließen
 
Ok, dann hier der Code:

Öffnen:
Delphi-Quellcode:
   wnd := FindWindow('ExploreWClass','Anapod Explorer');

   if wnd = 0 then
   begin
      RunProcess ('C:\WINDOWS\explorer.exe /e,/n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{BBA7EB3F-97AB-4EBD-BCA2-C3C8DBED4490}', SW_SHOWNORMAL, False, nil);

      TimeOut := GetTickCount + 2000;

      repeat
         Sleep(0);
         wnd := FindWindow('ExploreWClass','Anapod Explorer');
      until (wnd <> 0) or (GetTickCount > TimeOut);
   end;

   AnapodExplorerHandle := wnd; // AnapodExplorerHandle ist eine private Variable des Forms

// unwichtiger Code
Versuch, zu schließen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage (inttostr (AnapodExplorerHandle));

   SendMessage(AnapodExplorerHandle, WM_QUIT, 0, 0);
   SendMessage(AnapodExplorerHandle, WM_CLOSE, 0, 0);
end;
Und das Handle ist gleich dem, dass mir Winspy anzeigt ... ich blick' da nicht mehr so recht durch :?


Edit:

Habs jetzt hinbekommen, hatte direkt das SC_CLOSE als Message versendet ... :oops:
Richig muss es so sein:
Delphi-Quellcode:
SendMessage(AnapodExplorerHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
Dann geht's auch ... :angel2:

100nF 27. Jun 2005 21:26

Re: Explorerfenster schließen
 
Zitat:

Sleep(0);
bringt das auch was?? :gruebel:

jfheins 27. Jun 2005 21:31

Re: Explorerfenster schließen
 
Zitat:

Zitat von urbanbruhin
bringt das auch was?? :gruebel:

Du wirst es nicht glauben, aber dadurch geht's schneller :mrgreen:

Ich glaube, es bewirkt, dass er sofort seine Rechenzeit freigibt, und sie nicht solange in der sinnlosen Schleife verpulvert ...

Also ab und zu statt andauernd kucken, und dafür den anderen Threads mehr Zeit lassen - u.a. um das Programm zu starten.

Das wäre dann sogar logisch :)

toms 27. Jun 2005 23:12

Re: Explorerfenster schließen
 
Hallo,

Nimm mal PostMessage anstelle von SendMessage

Daniel G 27. Jun 2005 23:21

Re: Explorerfenster schließen
 
Zitat:

Zitat von jfheins
Zitat:

Zitat von urbanbruhin
bringt das auch was?? :gruebel:

Du wirst es nicht glauben, aber dadurch geht's schneller :mrgreen:

Lustig... darauf muss man erstmal kommen. Werd' ich mir merken...

jfheins 28. Jun 2005 14:10

Re: Explorerfenster schließen
 
Zitat:

Zitat von toms
Hallo,

Nimm mal PostMessage anstelle von SendMessage

Zitat:

bringt das auch was?? :gruebel:
( :mrgreen: )

Geht das dadurch noch schneller ?


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