标签: ipreviewhandler

如何获取IPreviewHandler文件扩展名?

如何获取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)

windows windows-shell ipreviewhandler

8
推荐指数
1
解决办法
3562
查看次数

标签 统计

ipreviewhandler ×1

windows ×1

windows-shell ×1