2009-07-07 211 views
1

我想获取指定文件夹的系统图标,但也许检索图标的唯一方法是使用SHGetFileInfo()方法。 SHGetFileInfo()方法的第一个参数是LPITEMIDLIST的指针。如何根据文件夹的路径获取LPITEMIDLIST指针?

如果我只有文件夹的绝对路径,我怎么才能得到指针根据路径?

回答

5

SHParseDisplayName()

欢迎来到美好的PIDL世界。

您可以在Introduction to the Shell Namespace阅读更多内容,但基本上PIDL是指向项目ID列表的指针。您可以将其视为连续内存中的链接列表,但不是每个节点都有指向下一个节点的指针,而是您拥有包含该项目的字节计数的cb成员,因此您可以将其添加到获取下一个项目的基地址。 IDLists以{cb = 0,abID = NULL}的项目结束。

那么,这些魔杖是什么?基本上你不在乎,也不知道。任何IShellFolder实现都可以创建一个新类型的ID来表示它在shell命名空间中的项目类型。 Shell实现的基本文件系统视图只是在这些列表中存储路径的各个部分,因此在第一个“用户”下面有一个类似于“c:\”的内容等。实际上,它们是序列化的可能包含更多数据的结构(或类)。但它们也可以代表打印机,网络共享,数据库搜索(用于搜索文件夹,堆栈等)。

您真正需要知道的是,你可以问IShellFolders给你,表示它们所包含的项的PIDL,以后你可以给PIDL还给他们,以及其他各种壳牌功能和接口,并且他们知道如何处理它们。 SHParseDisplayName()基本上做了什么(我认为)是通过注册表寻找所有注册的IShellFolder实现,并询问他们是否知道如何处理传入的字符串,并且第一个处理它会使PIDL生效背部。

+0

谢谢!我最近经常遇到PIDL的概念。你能推荐一些文章向我解释吗? – quantity 2009-07-07 06:12:37

相关问题