![]() |
Windows Explorer Pfad in der Adressleiste ermitteltn
Ich habe diese Frage bereits in einem anderen Forum gestellt. Offenbar konnte mir keiner die Frage beantworten vieleicht kann es einer von euch.
Ich benötige die Pfad des Verzeichnisses das in einem Windows Explorer Fenster angezeigt wird, also den Pfad der in der Combobox eines Windows Explorer Fensters angezeigt wird. Im moment hole ich mir das Handle der Combobox und extrahiere den Pfad per SendMessage. Diese Methode funktioniert leider nicht immer. Im Verzeichnis "Eigene Dateien" wird z.B. nur der Name "Eigene Dateien" angezeigt nicht jedoch der komplette Pfad. Ich müsste also sämtliche Systemordner durchlaufen um den Pfad von "Eigene Dateien" ermitteln zu können. Ein anderes Problem ist wenn der Benutzer den Pfad in der Combox editiert. In diesem Fall könnte ich den Pfad nicht mehr ermitteln! Kennt jemand eine andere Lösung um den Pfad zu ermitteln? Irgenwo muss der Pfad ja gespeichert sein, denn im "Eigenschaften"-Fenster wird ja auch der komplette Pfad des Verzeichnisses angezeigt. |
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
Es sollte die Environment.GetFolderPath-Methode helfen, mit Bezug auf die Environment.SpecialFolder-Enumeration. Du musst dann freilich noch die angezeigte Beschreibung mit der Beschreibung der Enumeration verbinden.
Viel Erfolg! Jürgen |
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
Zitat:
Danke für den Tip. :wink: |
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
Hi,
folgendes funktioniert bei mir unter Windows XP und Win98:
Delphi-Quellcode:
uses SHDocVw_TLB;
var ShellWin: IShellWindows; i: Integer; ClName: array[0..64]of Char; Pfad: AnsiString; begin ShellWin := CoShellWindows.Create; for i := 0 to Pred(ShellWin.Count) do with ShellWin.Item(i) as IWebBrowser2 do begin GetClassName(hwnd, ClName, SizeOf(ClName)); if (string(ClName)= 'ExploreWClass') or (string(ClName)= 'CabinetWClass') then begin Pfad:= StringReplace(LocationURL, 'file:///', '', [rfReplaceAll, rfIgnoreCase]); Pfad:= StringReplace(Pfad, '/', '\', [rfReplaceAll]); Pfad:= StringReplace(Pfad, '%20', ' ', [rfReplaceAll]); if DirectoryExists(Pfad) then ListBox1.Items.Add(IncludeTrailingPathDelimiter(Pfad)); //ListBox1.Items.Add(Format('%d %s %s', [HWND, LocationURL, LocationName])) end; end; |
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
Zitat:
Ich habe deinen Code mal in C# getestet nur um zu gucken wie man das mit C# programmieren könnte und es funktioniert auch bei mir. Für die die sich auch dafür interessieren: In C# müsste man zunächst auf die Com-Komponente "Microsoft Internet Controls" verweisen. Anschließend würde der folgende Code alle Windows Explorer Fenster Pfade und Internet Explorer Fenster Pfade auf der Konsole ausgeben.
Code:
Was mich nun interessieren würde ist wie kann man nun anhand des .Net Frameworks oder der WinApi das obige Beispiel implementieren. Ich wette die Klasse ShellWindowsClass im obigen Beispiel benutzt intern die WinApi. Wahrscheinlich gibt es eine Möglichkeit ohne auf die Com-Komponente zu verweisen. Hat jemand eine Idee.
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using SHDocVw; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load( object sender, EventArgs e ) { IShellWindows windows = new ShellWindowsClass(); foreach ( IWebBrowser2 window in windows ) { System.Diagnostics.Debug.WriteLine( window.LocationURL ); } } } } Vermutlich fragt ihr euch warum ich die Com-Komponente nicht benutzen möchte. Die Antwort ist einfach. Es interessiert mich einfach wie der Windows Explorer intern funktioniert und wie eventuell Daten ausgelesen und manipuliert werden können. |
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
Zitat:
Und durch die nachträgliche Änderung des Themas (Entfernung des C#) hatte ich Schwierigkeiten herauszufinden, was aus meiner Antwort geworden ist. Jürgen |
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
Zitat:
Ich habe nachträglich zusätzlich zu C# noch weitere Sprachen zum Thread hinzugefügt, damit ich mehr Leute anspreche die mir eventuell helfen können. |
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
Zitat:
|
Re: Windows Explorer Pfad in der Adressleiste ermitteltn
funktioniert auch unter vista :-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 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