是否有可能inheritance默认的IShellFolder实现?

我试图实现一个shell命名空间扩展名,唯一的目的是覆盖特定文件夹中的缩略图处理程序( IExtractImage )。 我希望其他所有东西都正常的文件夹一样 ,我宁愿不必重新实现在IShellFolder的默认实现中完成的所有事情。

那么,是否有可能从这个默认的实现inheritance? 如果是这样,怎么样?

使用组合也将是一个可以接受的解决scheme,但我怎样才能得到一个给定的文件夹类的实例?

Solutions Collecting From Web of "是否有可能inheritance默认的IShellFolder实现?"

1)有很多可以请求你的文件内容的外壳扩展。 例如.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. 用IID_IExtractImage调用IShellFolder3.GetUIObject,默认的IShellFolder3将返回已安装的缩略图处理程序。

此外,这样的方法可能会导致资源管理器内部(从我的做法)。

所以我相信你的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)此外,如果您的文件夹包含子文件夹不要忘记返回您的实现时,外壳请求IShellFolder(2)的子文件夹。