如何获取IPreviewHandler特定文件扩展名的shell ?
Windows允许开发人员为其自定义文件类型创建预览处理程序:
选择项目时,将调用预览处理程序,以在视图的阅读窗格中显示文件内容的轻量级,丰富的只读预览.这是在不启动文件的关联应用程序的情况下完成的.
预览处理程序是托管应用程序.主机包括Windows Vista或Microsoft Outlook 2007中的Windows资源管理器.
我想利用现有的基础IPreviewHandler设施来获取文件的缩略图.
问题是我的文件没有放在shell命名空间中(即它们不在硬盘上).他们坐在记忆中,通过一个可以访问IStream.这意味着我无法使用传统IExtractImage接口; 因为它不支持从Stream加载文件.
幸运的是,这就是现代IPreviewHandler支持(推荐并且更喜欢)从a加载数据的原因Stream,并建议不要从文件加载预览:
此方法优先于Initialize,因为它能够使用无法通过Win32路径访问的流,例如具有.zip文件扩展名的压缩文件的内容.
没有关于获得与特定扩展相关联的正确方法的文档IPreviewHandler.但是,如果我采取怎样的方向注册一个IPreviewHandler,并读取对方的合同:
HKEY_CLASSES_ROOT
.xyz
(Default) = xyzfile
HKEY_CLASSES_ROOT
xyzfile
shellex
{8895b1c6-b41f-4c1c-a562-0d564250836f} //IPreviewHandler subkey
(Default) = [clsid of the IPreviewHandler]
Run Code Online (Sandbox Code Playgroud)
鉴于我知道扩展,我应该能够遵循相同的路线.让我们用一个真实世界的例子,一个.jpg文件:


请注意,该文件有预览.请注意,我添加了第二个屏幕截图,以强调预览不是来自硬盘上的文件.
首先是它是一个.jpg文件:
HKEY_CLASSES_ROOT
.jpg
(Default) = …Run Code Online (Sandbox Code Playgroud)