是否可以继承默认的IShellFolder实现
Is it possible to inherit the default IShellFolder implementation?
我正在尝试实现shell命名空间扩展,其唯一目的是覆盖特定文件夹中的缩略图处理程序(IExtractImage
(。我希望其他所有内容都与普通文件夹中相同,并且我宁愿不必重新实现在IShellFolder
的默认实现中完成的所有操作......
那么,是否可以从这个默认实现继承?如果是这样,如何?
使用组合也是一个可接受的解决方案,但是如何获取给定文件夹的类实例?
1(有许多shell扩展可以请求您的文件内容。例如.ico文件图标处理程序。用户还可以安装例如信息提示扩展,它显示来自mp3文件的ID3标签,它也请求文件内容。用户可以在详细信息视图中设置其他列,其中一些列请求文件内容。因此,您必须控制 shell 命名空间扩展中的许多细节。
2(要创建默认实现,只需调用CoCreateInstance(CLSID_ShellFileSystemFolder,nil,CLSCTX_INPROC_SERVER,IID_IShellFolder,ShellFolder(。
3(有问题。例如:
- Shell 从您的 NSE 查询未知的 IShellFolder3。
- NSE 不实现 IShellFolder3,NSE 从默认实现中查询 IShellFolder3 并返回结果。
- 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(时返回您的实现。
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在C++中,如何在类和函数(可能是模板化的)的头中编写完整的实现
- 是否可以继承默认的IShellFolder实现