如果我有一个IShellFolder接口(interface)指针。我如何获得其PIDL?

我可以看到如何枚举其子级,也可以看到如何使用它来比较任意两个子级。但是我如何获得自己的pidl?

我问是因为我想知道:



我可以使用IShellFolder::CompareIDs(),但是我必须拥有两个文件夹的ID。

最佳答案

无论如何,克里斯或莫德凯在第一点上写的都不是重点。问题不是关于 shell 命名空间中的对象,而是关于具有IShellFolder接口(interface)的对象。拥有IShellFolder接口(interface)本身并不意味着在 shell namespace 中存在。原始问题是格式错误的,因为它假定具有IShellFolder接口(interface)的对象必须具有“自己的PIDL”。

我认为,您可以做的最好的事情就是Mordechai提出的建议:

  • 查看对象是否也具有IPersistFolder2接口(interface)

  • 该接口(interface)的目的是修复 shell 程序命名空间中的对象,这又使文件夹具有持久性。可以从Microsoft实际对IPersistFolderIPersistFolder2接口(interface)以及初始化 GetCurFolder 方法的看法出发,而不是从已发布的文档中得出任何结论。最为显着地:



    在#2上,恐怕Chris肯定是不正确的。当然,无需PIDL即可获得IShellFolder。克里斯为#1引入的“控制面板”为#2提供了现成的反例。只需将CLSID_ControlPanelIID_IShellFolder馈送到 CoCreateInstance 即可。您可以获得控制面板的完美可用实例,而无需“了解PIDL”。

    SHELL32中实现了一些其他可创建的Shell文件夹,并且任何DLL都可以设置任意数量的其他文件夹。

    关于c++ - 如何获取IShellFolder的PIDL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1766275/

    10-16 04:26