Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Welcher Ordner wird mit dem Explorer geöffnet? (https://www.delphipraxis.net/23040-welcher-ordner-wird-mit-dem-explorer-geoeffnet.html)

hibbert 27. Mai 2004 22:17


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

Luckie 27. Mai 2004 23:19

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.

hibbert 10. Jun 2004 12:53

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.

Luckie 10. Jun 2004 12:54

Re: Welcher Ordner wird mit dem Explorer geöffnet?
 
Dann wird wohl ein ShellHook die Lösung sein.

Uncle Cracker 10. Jun 2004 13:05

Re: Welcher Ordner wird mit dem Explorer geöffnet?
 
Du könntest jedoch auch diese Methode nehmen:

Delphi-Quellcode:
var
  wnd: HWnd;
begin
  wnd := FindWindow(nil, 'Delphi');
  PostMessage(wnd, WM_CLOSE, 0, 0);
end;
Dieser Code verhindert, dass das der Ordner "Delphi" geöffnet ist.
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]

dizzy 10. Jun 2004 13:09

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!

hibbert 10. Jun 2004 14:20

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

TStringlist 10. Jun 2004 14:32

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;

romber 27. Sep 2004 15:53

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?

TStringlist 27. Sep 2004 16:33

Re: Welcher Ordner wird mit dem Explorer geöffnet?
 
Zitat:

Zitat von romber
Und wo kommen FEditHandle und FExplorerHandle bitte her??? Muss ich in Uses-Teil was hinzufügen?

Nein, diese beiden Größen waren/sind bloß ganz normale (Feld-) Variable von Form1, ...welche quasi nur jeweils das Handle des Explorers bzw. das des fraglichen Edit-Controls darauf zwischenzuspeichern hatten:


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.
Seite 1 von 2  1 2      

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