gpt4 book ai didi

c++ - 是否可以继承默认的 IShellFolder 实现?

转载 作者:行者123 更新时间:2023-11-28 00:21:28 25 4
gpt4 key购买 nike

我正在尝试实现一个 shell 命名空间扩展,其唯一目的是覆盖特定文件夹中的缩略图处理程序 (IExtractImage)。 我希望其他一切都与普通文件夹中的一样,我宁愿不必重新实现在 IShellFolder 的默认实现中所做的一切...

那么,是否可以继承这个默认实现呢?如果是,怎么办?

使用组合也是一个可接受的解决方案,但我如何才能为给定文件夹获取类的实例?

最佳答案

1) 有许多 shell 扩展可以请求您的文件内容。例如 .ico 文件图标处理程序。用户还可以安装例如信息提示扩展,它显示来自 mp3 文件的 ID3 标签,它也请求文件内容。用户可以在详细 View 中设置其他列,其中一些请求文件内容。因此,您必须控制 shell namespace 扩展中的许多细节。

2) 要创建默认实现,只需调用 CoCreateInstance(CLSID_ShellFileSystemFolder, nil, CLSCTX_INPROC_SERVER, IID_IShellFolder, ShellFolder)。

3) 有问题。例如:

  1. Shell 从您的 NSE 查询未知的 IShellFolder3。
  2. 您的 NSE 未实现 IShellFolder3,NSE 从默认实现中查询 IShellFolder3 并返回结果。
  3. 使用 IID_IExtractImage 和默认 IShellFolder3 的 Shell 调用 IShellFolder3.GetUIObject 将返回已安装的缩略图处理程序。

这些方法也可能导致 Explorer 中的 AV(根据我的实践)。

所以我相信你的NSE必须实现默认实现的所有已知接口(interface)。如果您不想更改方法的行为,只需将参数传递给默认实现即可。已知(我)接口(interface):IBrowserFrameOptions、IOleCommandTarget、IPersist、IPersistIDList、IPersistFolder、IPersistFolder2、IPersistFolder3、IParentAndItem、IShellFolder、IShellFolder2、IObjectWithFolderEnumMode、IShellDetails、IShellFolderViewCB、IFolderFilter、INameSpace TreeControlFolderCapabilities、IShellIcon、IShellIconOverlay、IFolderType、IFolderViewSettings、IExplorerPaneVisibility、IPropertyStoreFactory、IPropertyStore , IItemNameLimits, IThumbnailFactory.

4) 据我了解,您必须控制以下接口(interface)的请求:IDataObject、IDropTarget、IExtractIconA(W)、IExtractImage、IPropertyStore、IPropertyStoreFactory、IShellFolder(2)、IQueryInfo。

5) IShellIcon.GetIconOf 必须返回扩展的默认图标。

6) 此外,如果您的文件夹包含子文件夹,请不要忘记在 shell 请求子文件夹的 IShellFolder(2) 时返回您的实现。

关于c++ - 是否可以继承默认的 IShellFolder 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269757/

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