AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Pidl vom Netzwerk-Pfad geht nicht so richtig
Thema durchsuchen
Ansicht
Themen-Optionen

Pidl vom Netzwerk-Pfad geht nicht so richtig

Ein Thema von MicMic · begonnen am 26. Feb 2021
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Pidl vom Netzwerk-Pfad geht nicht so richtig

  Alt 26. Feb 2021, 13:10
Hallo
Ich probiere mich hin und her. Aber es geht noch nicht so richtig.
Delphi-Quellcode:
Function StrToPIDL(AP,FN:String; DD:TWIN32FindDataW): PItemIDList;
Var
  Desktop: IShellFolder;
  PChEaten, DWAttributes: ULONG;
  Pbc : IBindCtx;
  Ifs : TFileSystemBindData;
  R : HResult;
Begin
  Result := Nil;
  If Succeeded(SHGetDesktopFolder(Desktop)) Then
  Begin
    DWAttributes := 0;
    PChEaten := 0;
    Ifs := TFileSystemBindData.Create;
    Ifs.SetFindData(dd);
    If CreateBindCtx(0,Pbc) = S_OK Then
    Begin
      If Pbc.RegisterObjectParam(STR_FILE_SYS_BIND_DATA,Ifs) = S_OK Then
      Begin
        R := Desktop.ParseDisplayName(0,Pbc,PWideChar(AP+FN),PChEaten,Result,DWAttributes);
        If R <> S_OK Then
        Begin
          f.Caption := 'FEHLER '+inttostr(length(ap+fn)); // ab 520 Zeichen kommt das mit einem Netzwerk-Pfad
          Result := Nil;
        End;
      End Else Result := Nil;
    End Else Result := Nil;
  End Else Result := Nil;
End;
Lokal geht alles wunderbar. Auch mit sehr langen Verzeichnissen und Dateinamen. Aber mit "\\RECHNER\Freigabe\......." gibt es zwei Probleme.
Also der Aufruf ist jedenfalls folgender:
Delphi-Quellcode:
// PA=Pfad
// FN=Dateiname
// DD=TWIN32FindDataW
PIDL := StrToPIDL(PA,FN,D);
ZeroMemory(@Info, SizeOf(TSHFileInfoW));
SHGetFileInfoW(PWideChar(PIDL),0,Info,SizeOf(TSHFileInfoW),SHGFI_SYSICONINDEX Or SHGFI_PIDL);
I1 := Info.iIcon; // Icon Index
Ab 260 Zeichen bekomme ich zwar noch ein PIDL aber wohl ein falscher. Denn ab hier stimmt Icon Index nicht mehr (Problem1). Und wie schon als Kommentar in der Funktion beschrieben, wird ab 520 kein PIDL mehr zugewiesen (Problem2). Das sind dann ja 2x260. Der rechnet wohl CreateBindCtx (DD.cFileName)+PA+FN dann zusammen? Aber ParseDisplayName hat doch keine MAX_PATH Einschränkung. Es geht ja auch Lokal. Nur leider nicht im Netzwerk und hier scheint dann doch was mit MAX_PATH zu laufen.

Info: Die Angabe von "\\?\UNC\" geht hier dann erst recht nicht.

Hat jemand eine Idee, wie man das mit dem Netzwerk-Pfaden lösen kann? Ich brauche halt für "SHGetFileInfoW" das PIDL.
  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 17:12 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