2009-07-07 13 views
1

Ich möchte das System-Symbol eines bestimmten Ordners abrufen, aber die einzige Möglichkeit, das Symbol abzurufen, ist die Verwendung der SHGetFileInfo() -Methode. Der erste Parameter der SHGetFileInfo() -Methode ist ein Zeiger von LPITEMIDLIST.Wie erhält man einen LPITEMIDLIST-Zeiger gemäß dem Pfad eines Ordners?

Wenn ich nur den absoluten Pfad des Ordners habe, wie kann ich den Zeiger entsprechend dem Pfad bekommen?

Antwort

5

SHParseDisplayName().

Willkommen in der wunderbaren Welt der PIDLs.

Sie können mehr unter Introduction to the Shell Namespace lesen, aber im Grunde eine PIDL ist ein Zeiger auf eine Artikel-ID-Liste. Sie können es sich als verkettete Liste im zusammenhängenden Speicher vorstellen, aber anstatt dass jeder Knoten einen Zeiger auf den nächsten Knoten hat, haben Sie stattdessen das cb-Mitglied, das die Anzahl der Bytes enthält, die das Element enthalten, also können Sie das hinzufügen die Basisadresse, um den nächsten Artikel zu erhalten. IDLists werden mit einem Element mit {cb = 0, abID = NULL} beendet.

Also, was ist in diesen magischen Lits? Im Grunde ist es dir egal und kann nicht wissen. Jede IShellFolder-Implementierung kann einen neuen ID-Typ erstellen, um den Typ des Elements im Shell-Namespace darzustellen. Die grundlegende Dateisystemansicht, die von der Shell implementiert wird, speichert nur die Teile des Pfades in diesen Listen. Sie haben so etwas wie "c: \" in der ersten "Users" in der nächsten usw. In Wirklichkeit sind sie serialisiert Strukturen (oder Klassen), die mehr Daten enthalten können. Sie können aber auch Drucker, Netzwerkfreigaben, Datenbanksuchen (für Suchordner, Stapel usw.) darstellen.

Alles, was Sie wirklich wissen müssen, ist, dass Sie IShellFolders bitten können, Ihnen eine PIDL zu geben, die die enthaltenen Elemente repräsentiert. Später können Sie ihnen diese und andere Shell-Funktionen und -Schnittstellen zurückgeben wie man mit ihnen umgeht. Was SHParseDisplayName() grundsätzlich tut (denke ich), geht durch die Registry, sucht nach allen registrierten IShellFolder-Implementierungen und fragt sie, ob sie wissen, was mit der übergebenen Zeichenfolge zu tun ist, und die erste, die es verarbeitet, macht die PIDL und gibt sie aus zurück.

+0

Vielen Dank! Ich habe mich in letzter Zeit oft mit dem Konzept der PIDLs getroffen. Kannst du mir einige Artikel empfehlen, die es mir erklären? – quantity