![]() |
Netzwerkressource mit SHBrowseForFolder auswählen
Hallo!
Im Programm soll man den Speicherordner für eine Datei einem entsprechenden Fenster auswählen können. Um den Speicherordner auszuwählen verwende ich folgenden Code:
Delphi-Quellcode:
Das klappt alles prima, mit dem Dialog kann man einen Ordner suchen oder auch einen neuen Ordner erstellen. Nun soll es aber auch möglich sein eine Netzwerkressource als Speicherordner auszuwählen, dass klappt mit dem Dialog jedoch leider nicht.
function SelectFolder(Caption, DefPath: string; ShowNewFolderBt: boolean = false): string;
var bi: TBrowseInfo; lpBuffer: PChar; pidlPrograms, pidlBrowse: PItemIDList; function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: Cardinal; lpData: Cardinal): Integer; stdcall; var PathName: array[0..MAX_PATH] of Char; begin case uMsg of BFFM_INITIALIZED: SendMessage(Hwnd, BFFM_SETSELECTION, Ord(True), Integer(lpData)); BFFM_SELCHANGED: begin SHGetPathFromIDList(PItemIDList(lParam), @PathName); SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, Longint(PChar(@PathName))); end; end; Result := 0; end; begin Result := ''; if (not SUCCEEDED(SHGetSpecialFolderLocation(GetActiveWindow, CSIDL_DESKTOP{CSIDL_DRIVES}, pidlPrograms))) then exit; GetMem(lpBuffer, MAX_PATH); FillChar(BI, SizeOf(BrowseInfo), 0); bi.hwndOwner := GetActiveWindow; bi.pidlRoot := pidlPrograms; bi.pszDisplayName := lpBuffer; bi.lpszTitle := PChar(Caption); bi.ulFlags := BIF_STATUSTEXT or BIF_NEWDIALOGSTYLE; bi.lpfn := @BrowseCallbackProc; bi.lParam := Integer(PChar(DefPath)); pidlBrowse := SHBrowseForFolder(bi); if (pidlBrowse <> nil) then if SHGetPathFromIDList(pidlBrowse, lpBuffer) then Result := slashPath(String(lpBuffer)); if (lpBuffer <> nil) then FreeMem(lpBuffer); end; Ich arbeite mit Vista, dort kann man ja z.B. FTP-Ordner als Netzwerkressorce in den Explorer einfügen und dann wie auf einen normalen Ordner darauf zugreifen. (Ich meine, dass das auch schon vor Vista ging, aber ich habe im Moment kein älteres System wo ich das ausprobieren könnte). Wenn ich solch einen FTP-Ordner einrichte wird dieser zwar auch in dem Dialog angezeigt und ich kann diesen auswählen, das Ergebnis der Funktions ist dann aber leer... Das Ganze scheitert in diesem Fall daran, dass SHGetPathFromIDList(pidlBrowse, lpBuffer) FALSE liefert und somit kein Pfad zurück gegeben wird. Weiß jemand was ich ändern muss damit auch bei Netzwerkressourcen der korrekte Pfad zurück gegeben wird? Besten Dank Ares |
Re: Netzwerkressource mit SHBrowseForFolder auswählen
Hallo Ares..
vielleicht hilft dir das ein wenig weiter... ![]() genauer gesagt: ![]() Hab ich dich richtig verstanden.. du willst Netzlaufwerke - aber keine FTP Ordner?
Delphi-Quellcode:
function IsLogicalDrive(Drive: string): boolean;
var sDrive: string; cDrive: char; begin sDrive := ExtractFileDrive(Drive); if sDrive = '' then Result := False else begin cDrive := UpCase(sDrive[1]); if cDrive in ['A'..'Z'] then result := (GetLogicalDrives And (1 Shl (Ord(cDrive) - Ord('A')))) <> 0 else Result := False; end; end; |
Re: Netzwerkressource mit SHBrowseForFolder auswählen
Zitat:
Eigentlich funktioniert die Auswahl aller Ordner bestens, nur die Auswahl der FTP-Ordner (bzw. allgemeiner der Netzwerkressourcen) nicht. Hier wird ein leerer Pfad zurückgegeben. Ich arbeite wie gesagt mit Vista und habe wie oben beschrieben einen FTP-Ordner eingerichtet. Dieser wird mir im Explorer als Ordner "www.meineFTPSeite.xyz" direkt unter "Computer" also quasi als eigenes Laufwerk angezeigt. Der Eigentliche Pfad dieses Ordners ist aber "D:\Benutzer\<Benutzer>\AppData\Roaming\Microsoft\ Windows\Network Shortcuts\www.meineFTPSeite.xyz". Wenn ich nun mit dem Dialog für die Ordnersuche den FTP-Ordner auswähle, sollte mir dieser eigentlich diesen Pfad zurückgeben. Stattdessen erhalte ich aber nur ein leeres Ergebnis, weil SHGetPathFromIDList(pidlBrowse, lpBuffer) FALSE liefert...
Delphi-Quellcode:
Durch das Falg RETURNONLYFSDIRS wird verhindert, dass "unechte Ordner" wie "Computer", "Systemsteuerung" oder "Netzwerk" ausgewählt werden. Wird solch ein Ordner gewählt ist der OK Button des Dialogs deaktiviert. Das greift aber nicht bei dem FTP-Ordner, der Dialog betrachtet diesen also als "echten" Ordner. Nur es wird kein Pfad zurück geliefert...
bi.ulFlags := BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT or BIF_NEWDIALOGSTYLE;
Also: Wie bekomme ich den Dialog dazu, dass er mir bei der Auswahl des FTP-Ordners den korrekten Pfad liefert? |
Re: Netzwerkressource mit SHBrowseForFolder auswählen
Niemand mehr eine Idee?
|
Re: Netzwerkressource mit SHBrowseForFolder auswählen
Ich bin hier leider noch kein Stück weiter gekommen. Hat niemand mehr eine Idee wie das zu lösen ist?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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