自从 Windows Vista 开始出现的 预览处理器 是一类 Windows shell 扩展,当你在文件资源管理器中按 Alt
+P
,显示出来的窗格就是用来显示预览的,安装了合适的 app 后,你可以查看 PDF 的预览、Office 的预览等。Windows 自带的预览处理器可以预览文本文档、3D 模型等等。预览处理器是文件关联的一部分。
注意:图片的预览并不是预览处理器生成的,而是缩略出提供器生成的!
预览处理器有两个方面,一是开发者可以开发新的预览处理器,允许用户预览更多文件;另一方面是开发者可以使用预览处理器架构。
最著名的预览处理器的使用者是 Explorer 和 Outlook。此外,所有使用 common dialog (打开 /保存文件对话框)的程序都潜在使用了预览处理器(因为你可以在 common dialog 中唤起预览窗格)。
今天的小甜点是使用 WPF (.NET) 访问预览处理器。之所以可以用 .NET 访问预览处理器,是因为预览处理器永远是进程外的扩展(同一个进程最多加载一个版本的 CLR [这一点不完全准确] )。
MSDN 上没有明显教学如何使用预览处理器,实际上,阅读 如何提供预览处理器 的文档就自然解答了如何消费预览处理器的问题。
我有两篇 blog 记录该过程,以及一些常见的错误。
通过使用自己编写的最小符合预览器规范的程序,可以检查各个预览器是否实现正确。实际检查发现 Adobe PDF 预览器、Word 预览器和 PowerPoint 预览器都有奇奇怪怪的问题:
SetWindow
和 SetRect
设置的左上角坐标;SetWindow
设置的显示范围,但对 SetRect
设置的显示范围处理正确。这里应该表扬 Windows 的文本预览器和 Excel 预览器,它们的实现非常正确。
下次有空我可以写写如何在 Windows 上为其他文件提供预览(比如,我们可以做带有语法高亮的代码预览)。