![]() |
Pidl vom Netzwerk-Pfad geht nicht so richtig
Hallo
Ich probiere mich hin und her. Aber es geht noch nicht so richtig.
Delphi-Quellcode:
Lokal geht alles wunderbar. Auch mit sehr langen Verzeichnissen und Dateinamen. Aber mit "\\RECHNER\Freigabe\......." gibt es zwei Probleme.
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; Also der Aufruf ist jedenfalls folgender:
Delphi-Quellcode:
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.
// 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 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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