AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Netzwerkressource mit SHBrowseForFolder auswählen
Thema durchsuchen
Ansicht
Themen-Optionen

Netzwerkressource mit SHBrowseForFolder auswählen

Ein Thema von Ares · begonnen am 1. Dez 2008 · letzter Beitrag vom 8. Dez 2008
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Netzwerkressource mit SHBrowseForFolder auswählen

  Alt 1. Dez 2008, 15:55
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:
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;
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#2

Re: Netzwerkressource mit SHBrowseForFolder auswählen

  Alt 2. Dez 2008, 18:16
Hallo Ares..

vielleicht hilft dir das ein wenig weiter...
http://www.madshi.net/

genauer gesagt: http://help.madshi.net/SpecialFolders.htm

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;
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#3

Re: Netzwerkressource mit SHBrowseForFolder auswählen

  Alt 3. Dez 2008, 07:13
Zitat von erich.wanker:
Hab ich dich richtig verstanden.. du willst Netzlaufwerke - aber keine FTP Ordner?
Nein, der Dialog soll mir alle Ordner zurück in die man (mal abgesehen von den Rechten) schreiben kann. Also "normale" Ordner, Netzwerklaufwerke, FTP Ordner, USB-Sticks, etc. Nur Ordner wo man keine Daten speichern kann wie z.B. "Computer", "Systemsteuerung" oder "Netzwerkumgebung" soll man nicht auswählen können.

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...

bi.ulFlags := BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT or BIF_NEWDIALOGSTYLE; 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...


Also: Wie bekomme ich den Dialog dazu, dass er mir bei der Auswahl des FTP-Ordners den korrekten Pfad liefert?
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#4

Re: Netzwerkressource mit SHBrowseForFolder auswählen

  Alt 5. Dez 2008, 08:29
Niemand mehr eine Idee?
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#5

Re: Netzwerkressource mit SHBrowseForFolder auswählen

  Alt 8. Dez 2008, 13:31
Ich bin hier leider noch kein Stück weiter gekommen. Hat niemand mehr eine Idee wie das zu lösen ist?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz