如果我有一个IShellFolder
接口(interface)指针。我如何获得其PIDL?
我可以看到如何枚举其子级,也可以看到如何使用它来比较任意两个子级。但是我如何获得自己的pidl?
我问是因为我想知道:
我可以使用IShellFolder::CompareIDs()
,但是我必须拥有两个文件夹的ID。
最佳答案
无论如何,克里斯或莫德凯在第一点上写的都不是重点。问题不是关于 shell 命名空间中的对象,而是关于具有IShellFolder
接口(interface)的对象。拥有IShellFolder
接口(interface)本身并不意味着在 shell namespace 中存在。原始问题是格式错误的,因为它假定具有IShellFolder
接口(interface)的对象必须具有“自己的PIDL”。
我认为,您可以做的最好的事情就是Mordechai提出的建议:
IPersistFolder2
接口(interface)该接口(interface)的目的是修复 shell 程序命名空间中的对象,这又使文件夹具有持久性。可以从Microsoft实际对
IPersistFolder
和IPersistFolder2
接口(interface)以及初始化和 GetCurFolder 方法的看法出发,而不是从已发布的文档中得出任何结论。最为显着地:在#2上,恐怕Chris肯定是不正确的。当然,无需PIDL即可获得
IShellFolder
。克里斯为#1引入的“控制面板”为#2提供了现成的反例。只需将CLSID_ControlPanel
和IID_IShellFolder
馈送到 CoCreateInstance 即可。您可以获得控制面板的完美可用实例,而无需“了解PIDL”。SHELL32中实现了一些其他可创建的Shell文件夹,并且任何DLL都可以设置任意数量的其他文件夹。
关于c++ - 如何获取IShellFolder的PIDL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1766275/