缩略图处理程序

与早期版本的 Windows 相比,Windows Vista 更能使用特定于文件的缩略图图像。 Windows Vista 在所有视图、对话框中以及提供它们的任何文件类型中使用它们。 其他应用程序也可以使用缩略图。 缩略图显示也已更改。 现在,可以使用用户可选择的连续大小范围,而不是 Windows XP 中提供的图标和缩略图等离散大小。

注意

你可能会听到这些缩略图称为“实时图标”。

 

Windows Vista UI 中经常使用 32 位分辨率和 256x256 像素的缩略图。 文件格式所有者应准备好以该大小显示其缩略图。 它们还应为反映特定文件内容的缩略图提供非静态图像。 例如,文本文件的缩略图应显示文档的缩略版本,包括其文本。

引入了 IThumbnailProvider 接口,使提供缩略图比过去更简单、更直接,而 IExtractImage 本来会改为使用。 请注意,使用 IExtractImage 的现有代码在 Windows Vista 下仍然有效。 但是,“详细信息”窗格中不支持 IExtractImage

本主题讨论以下内容:

缩略图进程

处理程序(包括缩略图处理程序)默认在单独的进程中运行。 可以通过在调用 IShellItem::BindToHandler 时将 NULL 值作为绑定上下文传递来强制处理程序在进程内运行,如下所示:

IShellItem::BindToHandler(NULL, BHID_ThumbnailHandler,..)

默认情况下,还可以通过在注册表中设置 DisableProcessIsolation 项来选择退出进程,如本示例所示。 ({E357FC) CD-A995-4576-B01F-234630154E96} 的 CLSID 是 IThumbnailProvider 实现的 CLSID。

HKEY_CLASSES_ROOT
   CLSID
      {E357FCCD-A995-4576-B01F-234630154E96}
         DisableProcessIsolation = 1

缩略图缓存和大小调整

如果需要缩略图,Windows 会首先检查图像的缩略图缓存。 如果在缓存中找不到图像,则调用缩略图提取器。 当图像的上次修改时间晚于缓存中副本的时间时,也会调用它。

此缓存中的缩略图以一组离散大小存储。 所有大小都以像素为单位。

  • 32x32
  • 96x96
  • 256x256
  • 1024x1024

注意

这些值可能会更改。 代码不应假定将始终使用任何特定大小。

 

如果图像不是正方形的,则不应自行填充该图像。 Windows 负责遵循原始纵横比并将图像填充为平方大小。

当要求特定大小的图像时,除非找到完全匹配,否则 Windows Vista 始终检索下一个最大图像,并将其缩小到请求的大小。 映像不会像以前版本的 Windows 一样纵向扩展。

下表提供了请求大小与可用大小之间的关系的一些示例。

提供的最大图像大小 提取程序请求的大小 你提供
156x120 256x256 156x120 (请勿填充,保持纵横比)
2048x1024 256x256 256x128 (请勿填充,保持纵横比)

 

可以将一个截止点声明为注册表中关联应用的程序 ID 条目的一部分。 低于此大小时,不使用缩略图。

HKEY_CLASSES_ROOT
   .{ProgId}
      ThumbnailCutoff

ThumbnailCutoff 条目是以下REG_DWORD值之一。

Cutoff HighDPI 敏感度
0 32x32
1 16x16
2 48x48
3 16x16

高每英寸点数 (dpi) 敏感度意味着缩略图的像素尺寸会自动调整为更高的 dpi。 例如,96 dpi 的 32x32 图像将是 120 dpi 的 40x40 图像。

如果未指定 ThumbnailCutoff 条目,则默认截止为 20x20 (不区分 dpi 的) 。

缩略图覆盖

缩略图覆盖层是显示在缩略图右下角的小图像,为开发人员提供了将品牌标识应用于其缩略图的机会。 覆盖层在注册表中声明为关联应用的程序 ID 条目的一部分,如下所示:

HKEY_CLASSES_ROOT
   .{ProgId}
      TypeOverlay

TypeOverlay 条目包含解释如下REG_SZ值:

  • 如果 值是资源引用 (嵌入 DLL) (例如 )ISVComponent.dll,-155中的 .ico 文件,则会使用该图像作为具有该文件扩展名的文件的覆盖。 请注意,在此示例中, 155 是资源 ID,如果 DLL 不在标准路径 ((如 C:/Windows/System32) )中,则需要完整路径,而不仅仅是 DLL 名称。
  • 如果 值为空字符串,则不会对图像应用覆盖。
  • 如果值不存在,则使用关联应用程序的默认图标。

缩略图的覆盖应仅通过此机制提供并由 Windows 应用。 请勿自行应用覆盖。

缩略图装饰

阴影等装饰根据用户当前选择的主题应用于缩略图。 装饰由 Windows 提供;请勿自行创建它们。 Windows 可能随时更改特定装饰的外观,因此,如果你提供自己,则有可能与系统不同步。 缩略图可能最终看起来已过时或过时。

可能的装饰在注册表中声明为关联应用的程序 ID 条目的一部分,如下所示:

HKEY_CLASSES_ROOT
   .{ProgId}
      Treatment

“处理”条目包含以下REG_DWORD值之一:

含义
0 无装饰
1 投影
2 照片边框
3 视频链轮

默认情况下,投影应用于图像。

注册缩略图处理程序

缩略图处理程序的注册基于标准文件关联。

缩略图处理程序 Shell 扩展的 GUID 为 E357FCCD-A995-4576-B01F-234630154E96

IThumbnailProvider

生成缩略图处理程序

缩略图处理程序指南