windows下的Quicklook

架构

windows下的quicklook,基于COM实现,分为两个部分:

  1. Preview Handler: 实现真正的预览功能,包括内容如何渲染(内容是只读的),是否响应用户输入(鼠标、键盘等),右键菜单,内容如何销毁等
  2. Preview Host: 宿主程序,提供预览区域,调用Preview Hander实现的接口,可控制预览区域(大小、是否显示等)

可以简单理解为server - client模式,Preivew Handler是server, Preivew Host是client

开发流程

  1. Preview Host根据文件扩展名,查找注册表(推荐使用IQueryAssociations),确定Preview Handler
  2. 创建Preview Handler实例, 推荐使用CoCreateInstance
  3. 向Preview Handler 传递要预览的文件(stream, file等方式)
  4. 可选: 设置前景色,背景色,字体等,需要Preview handler实现这些功能
  5. 向Preview Handler 传递可预览区域(window Handle)
  6. 调用DoPreview 显示预览内容
  7. 调用Unload结束预览
    quicklook arch

Preview Handler

有两种实现模式:

  1. In-Process server, 是以DLL的方式实现(DllSurrogate), 需指定代理为Prevhost.exe, 优点: 实现简单,灵活
  2. local server,是以独立exe程序实现, 官方不建议,但Office是以这种方式实现的

这两种模式是COM编程中的两种,其他还有Remote Server, in-process handler

参考

  1. COM:https://docs.microsoft.com/zh-cn/windows/win32/com/component-object-model--com--portal
  2. https://docs.microsoft.com/en-us/windows/win32/shell/preview-handlers
  3. https://geelaw.blog/entries/ipreviewhandlerframe-wpf-2-interop/