是否可以继承默认的IShellFolder实现

Is it possible to inherit the default IShellFolder implementation?

本文关键字:IShellFolder 实现 默认 继承 是否      更新时间:2023-10-16

我正在尝试实现shell命名空间扩展,其唯一目的是覆盖特定文件夹中的缩略图处理程序(IExtractImage(。我希望其他所有内容都与普通文件夹中相同,并且我宁愿不必重新实现在IShellFolder的默认实现中完成的所有操作......

那么,是否可以从这个默认实现继承?如果是这样,如何?

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

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

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

3(有问题。例如:

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

此外,这些方法可以在资源管理器中导致AV(根据我的实践(。

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

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

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

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