gpt4 book ai didi

icons - 如何根据文件夹的路径获取LPITEMIDLIST指针?

转载 作者:行者123 更新时间:2023-12-02 17:55:54 33 4
gpt4 key购买 nike

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

如果我只有文件夹的绝对路径,如何根据路径获取指针?

最佳答案

SHParseDisplayName() .

欢迎来到 PIDL 的奇妙世界。

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

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

你真正需要知道的是你可以要求 IShellFolders 给你一个 PIDL 来代表它们包含的项目,然后你可以把这个 PIDL 还给他们,以及其他各种 Shell 函数和接口(interface),他们知道如何做来对付他们。 SHParseDisplayName() 基本上所做的(我认为)是通过注册表查找所有已注册的 IShellFolder 实现,并询问它们是否知道如何处理您传入的字符串,第一个处理它的函数会生成 PIDL 并给出它后退。

关于icons - 如何根据文件夹的路径获取LPITEMIDLIST指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090312/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com