![]() |
Welcher Ordner wird mit dem Explorer geöffnet?
Hi,
gibt es eine Möglichkeit, herrauszufinden, welche Ordner gerade vom Explorer geöffnet wird? thx hibbert |
Re: Welcher Ordner wird mit dem Explorer geöffnet?
Könnte schwer bis unmöglich werden. Ein ShellHook könnte die Lösung sein, ich kenne mich da aber nicht so aus. Fragen wir doch mal anders rum: Was hast du denn vor? Eventuell brauchst du das gar nicht.
|
Re: Welcher Ordner wird mit dem Explorer geöffnet?
ich möchte einfach nur ein programm starten, wenn ein ein bestimmter ordner geöffnet ist.
|
Re: Welcher Ordner wird mit dem Explorer geöffnet?
Dann wird wohl ein ShellHook die Lösung sein.
|
Re: Welcher Ordner wird mit dem Explorer geöffnet?
Du könntest jedoch auch diese Methode nehmen:
Delphi-Quellcode:
Dieser Code verhindert, dass das der Ordner "Delphi" geöffnet ist.
var
wnd: HWnd; begin wnd := FindWindow(nil, 'Delphi'); PostMessage(wnd, WM_CLOSE, 0, 0); end; Das musst du jetzt nur für dich ändern. [Edit] Du musst jetzt eben nur anstatt "PostMessage(wnd, WM_CLOSE, 0, 0);" das hier nehmen "if wnd <> 0 then begin ..." und dann das machen was du willst [/Edit] |
Re: Welcher Ordner wird mit dem Explorer geöffnet?
Aber auch nur wenn die Option "vollständigen Pfad in Titelleiste anzeigen" aus ist. Sonst musst du den ganzen Pfad abprüfen!
|
Re: Welcher Ordner wird mit dem Explorer geöffnet?
k, danke das funzt schonmal, zb. mit dem schließen des Fensters.
Aber wie bekomme ich nun den Pfad dieses Ordners raus ? thx hibbert |
Re: Welcher Ordner wird mit dem Explorer geöffnet?
Wenn man genaueres über den aktuellen Ordner-Pfad wissen möchte, dann könnte man auch einfach die Adressleiste des Explorers auslesen. Das einzigste was man dazu wissen muss ist nur, dass das eigentliche Control, welches da den Text beinhaltet, eines von der Class 'Edit' ist und der Class-Name des Explorers 'ExploreWClass' lautet. Damit sucht man also zuerst per FindWindow die Explorer-Handle und danach mittels EnumChildWindows die Handle dieses besagten Edit-Controls. Anschließen braucht man sich nur noch mehr der SendMessage-Funktion bedienen und lässt sich mit ihr + EM_GETLINE den gewünschten Edit-Text einfach ausgeben, also z.B. so:
Code:
function EnumChildProc(hWindow: HWND; lParameter: LPARAM): Bool; stdcall;
var ClassNameStr : string[255]; ClassNameStrLen : integer; begin ClassNameStrLen := GetClassName(hWindow,@ClassNameStr[1],255); SetLength(ClassNameStr,ClassNameStrLen); if ClassNameStr <> 'Edit' then Result := true else begin Form1.FEditHandle := hWindow; Result := false; end; end; function getEditStr(hWindow: HWND): string; var EditStr : string[255]; EditStrLen : integer; begin EditStr[1] := chr(255); EditStrLen := sendMessage(hWindow,EM_GETLINE,0,integer(@EditStr[1])); SetLength(EditStr,EditStrLen); Result := EditStr; end; procedure TForm1.Button1Click(Sender: TObject); begin FExplorerHandle := FindWindow('ExploreWClass',Nil); EnumChildWindows(FExplorerHandle, @EnumChildProc, 0); label1.Caption := getEditStr(FEditHandle); end; |
Re: Welcher Ordner wird mit dem Explorer geöffnet?
Und wo kommen FEditHandle und FExplorerHandle bitte her??? Muss ich in Uses-Teil was hinzufügen?
|
Re: Welcher Ordner wird mit dem Explorer geöffnet?
Zitat:
Delphi-Quellcode:
type
TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private FEditHandle : hWnd; FExplorerHandle : hWnd; { Private-Deklarationen } public { Public-Deklarationen } end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 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