![]() |
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 ![]() was ich hätte, um das Fenster zu identifizieren, wäre einerseits die ProcessID, zur Not hät' ich aber auch ein Handle da ... |
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. |
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 :( ) |
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. |
Re: Explorerfenster schließen
Ok, dann hier der Code:
Öffnen:
Delphi-Quellcode:
Versuch, zu schließen:
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
Delphi-Quellcode:
Und das Handle ist gleich dem, dass mir Winspy anzeigt ... ich blick' da nicht mehr so recht durch :?
procedure TForm1.Button1Click(Sender: TObject);
begin showmessage (inttostr (AnapodExplorerHandle)); SendMessage(AnapodExplorerHandle, WM_QUIT, 0, 0); SendMessage(AnapodExplorerHandle, WM_CLOSE, 0, 0); end; Edit: Habs jetzt hinbekommen, hatte direkt das SC_CLOSE als Message versendet ... :oops: Richig muss es so sein:
Delphi-Quellcode:
Dann geht's auch ... :angel2:
SendMessage(AnapodExplorerHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
|
Re: Explorerfenster schließen
Zitat:
|
Re: Explorerfenster schließen
Zitat:
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 :) |
Re: Explorerfenster schließen
Hallo,
Nimm mal PostMessage anstelle von SendMessage |
Re: Explorerfenster schließen
Zitat:
|
Re: Explorerfenster schließen
Zitat:
Zitat:
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