QuickLook插件开发教程:从零编写你的第一个文件预览插件
2026/9/20 23:29:46 网站建设 项目流程

QuickLook插件开发教程:从零编写你的第一个文件预览插件

【免费下载链接】QuickLookBring macOS “Quick Look” feature to Windows项目地址: https://gitcode.com/gh_mirrors/qu/QuickLook

QuickLook 是一款把 macOS 的"快速查看"体验带到 Windows 的文件预览工具,通过按键即可在独立窗口中瞬间预览图片、视频、文档、压缩包等各类文件,无需打开任何完整应用程序。本文将带你从零开始编写第一个 QuickLook 插件,让 QuickLook 支持一种全新的文件类型预览。

1. 理解插件架构

QuickLook 采用插件化设计:每个文件类型的预览功能都是独立插件,主程序负责调度,插件负责渲染。所有插件都实现统一的IViewer接口,这是整个插件开发的核心契约。

📄 接口定义:QuickLook.Common/Plugin/IViewer.cs

IViewer包含6 个成员,构成插件的生命周期:

成员作用调用时机
Priority插件优先级(数字越大越优先)加载时
Init()一次性初始化(解压资源等)应用启动时
CanHandle(path)判断能否处理该文件每次按键时
Prepare(path, context)窗口显示前的轻量准备预览前
View(path, context)执行实际加载与渲染预览时
Cleanup()释放非托管资源预览结束时

💡ContextObject是插件与主程序交互的运行时对象,可设置标题、尺寸、主题、忙状态等。详见 QuickLook.Common/Plugin/ContextObject.cs

2. 创建插件项目

新建一个 WPF 类库项目(参考现有插件结构),并添加对QuickLook.Common的引用:

<ProjectReference Include="..\QuickLook.Common\QuickLook.Common.csproj" />

完整示例可参考:QuickLook.Plugin/QuickLook.Plugin.BinaryViewer/

📌 若独立开发,可直接通过 NuGet 引用QuickLook.Common包,见 QuickLook.Common/README.md

3. 编写 Plugin.cs 核心逻辑

插件入口类命名为Plugin,实现IViewer接口。以支持自定义扩展名为例:

public sealed class Plugin : IViewer { private static readonly HashSet<string> Extensions = [".myext"]; private MyPanel _panel; public int Priority => 0; public void Init() { } public bool CanHandle(string path) { return !Directory.Exists(path) && Extensions.Any(ext => path.EndsWith(ext, StringComparison.OrdinalIgnoreCase)); } public void Prepare(string path, ContextObject context) { context.PreferredSize = new Size(900, 600); context.Title = Path.GetFileName(path); } public void View(string path, ContextObject context) { _panel = new MyPanel(); _panel.LoadFile(path); context.ViewerContent = _panel; context.IsBusy = false; // 关闭加载指示器 } public void Cleanup() { _panel?.Unload(); _panel = null; } }

关键要点:

  • CanHandle必须排除目录,并用不区分大小写的方式匹配扩展名
  • Prepare只做轻量工作,禁止耗时操作
  • View中创建 WPF 控件,赋值给context.ViewerContent,最后务必context.IsBusy = false
  • Cleanup释放资源,避免内存泄漏

4. 创建预览面板(WPF 控件)

插件的"内容区"是一个普通的 WPFUserControl,负责真正的渲染。以十六进制查看器为参考:

📄 面板示例:QuickLook.Plugin/QuickLook.Plugin.BinaryViewer/BinaryViewerPanel.xaml

面板需暴露一个加载方法(如LoadFile(string path))供View()调用。

5. 可选:添加"更多菜单"功能

若希望在预览窗口标题栏的右键菜单中添加自定义操作(如"另存为"、"打开方式"),可额外实现IMoreMenuExtended接口:

📄 接口定义:QuickLook.Common/Plugin/MoreMenu/IMoreMenu.cs

📄 使用示例:QuickLook.Plugin/QuickLook.Plugin.BinaryViewer/Plugin.MoreMenu.cs

6. 构建与部署

  1. 编译插件项目(Release | x64),输出 DLL
  2. 将 DLL 复制到 QuickLook 安装目录的QuickLook.Plugin文件夹
  3. 重启 QuickLook,选中目标文件按Space即可预览

7. 进阶技巧

  • 优先级调整:多个插件处理同一文件时,Priority值大者胜出,避免冲突
  • 文件头检测CanHandle中可读取文件前若干字节,按 Magic Number 判断真实类型
  • 主题适配:通过context.Theme切换深浅色主题,Theme = Themes.Dark启用深色
  • 尺寸适配:调用context.SetPreferredSizeFit(size, maxRatio)让窗口随屏幕缩放

参考项目结构

路径说明
QuickLook.Common/Plugin/插件接口与运行时对象
QuickLook.Common/Helpers/工具类(文件、窗口、主题)
QuickLook.Plugin/20+ 官方插件,覆盖图片/文本/PDF/数据库等
QuickLook.Plugin/QuickLook.Plugin.PluginInstaller/插件安装器,可参考其加载逻辑

掌握以上 6 步,你就能为 QuickLook 编写任意文件类型的预览插件,让"按空格即预览"的体验扩展到你需要的每一种文件格式。

【免费下载链接】QuickLookBring macOS “Quick Look” feature to Windows项目地址: https://gitcode.com/gh_mirrors/qu/QuickLook

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询