Ich habe zwar von der Shell-Programmierung nicht so viel Ahnung, aber wann hätte mich so eine Lappalie je aufgehalten?
Da ich mit der Splitter-Demo, die ich vor einiger Zeit schon mal irgendwo angehangen habe, ein Shell-Sample habe, habe ich ein bisschen damit herumgespielt und den Inhalt vom Arbeitsplatz angezeigt bekommen.
Die Demo möchte ich aber unter Vorbehalt weitergeben. Wie gesagt, ganz firm bin ich nicht. Und evtl. ist es auch nur ein Bug bzw. Denkfehler meinerseits, aber --
Die Objekte ließen sich ja relativ simpel auslesen. Aber als Symbole wurden stets nur Ordner angezeigt. Das Problem löste sich, nachdem ich eine neue PIDL (basierend auf dem Parent und dem jeweils aktuellen Objekt) generiert habe.
Und in der Funktion "SHGetFileInfo", die ich für die Symbole benutzt habe, heißt es ja auch, es wird eine absolute PIDL gebraucht, wenn man eine solche zum Ermitteln der Symbole verwenden möchte:
Zitat:
If the uFlags parameter includes the SHGFI_PIDL flag, this parameter must be the address of an ITEMIDLIST (PIDL) structure that contains the list of item identifiers that uniquely identifies the file within the Shell's namespace. The pointer to an item identifier list (PIDL) must be a fully qualified PIDL. Relative PIDLs are not allowed.
Inwieweit mein Weg aber korrekt ist, ...
who knows?
Schau einfach mal in die Prozedur "Scan". Dort findest du mit
pidlRoot := AppendPIDL(pidlParent,pidlItem);
die Zeile, wo ich besagte neue PIDL generiert habe. Diese wird mit der PIDL des jeweiligen Objektes an die Prozedur "CreateListItem" übergeben. Wie gesagt: mit "pidlItem" kam ich zwar an den Namen ran, aber das Symbol war falsch. Und "pidlRoot" zeigte zwar das richtige Symbol, allerdings keinen Namen. Darum beides.
Die Demo ist zwar
nonVCL, aber das ändert ja nichts an den Shell-Zeilen.