![]() |
Shellnamespace und SHBindToParent
Hallo!
Ich probiere mich derzeit ein wenig am ShellNamespace und möchte eine Funktion schreiben, die mir ausgehend von einem Verzeichnis (definiert als PIDL) das Parentverzeichnis bzw. Parentobjekt zurückliefert. Als Ausgangspunkt habe ich folgende Funktionen geschrieben, die ein Verzeichnis in eine PItemIDList umwandeln bzw. eine PIDL wieder als Pfad darstellen:
Delphi-Quellcode:
Wenn ich die MSDN richtig verstanden habe, so kann ich mittels der Funktion SHBindToParent einen Bezug zum IShellFolder.Interface des Parentobjekts herstellen. Leider liegt hier das Problem: Ich bekomme bei SHBindToParent einen kuriosen Wert zurückgeliefert:
Function ConvertPathToPIDL(Path: String): PItemIDList;
var ShellMalloc: iMalloc; ShellFolder: iShellFolder; ParentFolder: iShellFolder; Eaten, Attributes: uLong; Begin Result := NIL; If Succeeded(SHGetMalloc(ShellMalloc)) Then Begin Attributes := 0; SHGetDesktopFolder(ShellFolder); if Assigned(ShellFolder) then ShellFolder.ParseDisplayName(0, NIL, PWideChar(Path), Eaten, Result, Attributes); End; End; function ConvertPidlToPath(IdList: PItemIdList): String; begin SetLength(Result, MAX_PATH); if SHGetPathFromIdList(IdList, PChar(Result)) then begin SetLength(Result, StrLen(PChar(Result))); Result := IncludeTrailingPathDelimiter(Result); end else Result := ''; end;
Delphi-Quellcode:
Ergebnis:
procedure TForm1.Button1Click(Sender: TObject);
Var FolderPIDL: PItemIDList; ParentPIDL: PItemIDList; ParentIShellFolder: IShellFolder; Attributes: uLong; begin FolderPIDL := ConvertPathToPIDL('c:\temp'); // Gegenprüfung Memo1.Lines.Add(ConvertPidlToPath(FolderPIDL)); SHBindToParent(FolderPIDL, IID_IShellFolder, Pointer(ParentIShellFolder), ParentPIDL); // Parent-IShellFolder? Memo1.Lines.Add(ConvertPidlToPath(ParentPIDL)); end; C:\Temp\ C:\Users\gkoeder\Desktop\Temp\ Eigentlich wollte ich als Ergebnis C:\, also das Parentverzeichnis von C:\Temp\ Hat jemand eine Idee, worin das problem liegen könnte? Dankeschön! Viele Grüße, Gerald |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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