此文档介绍了 PowerToys 中的文件资源管理器集成组件,包括预览处理程序和缩略图提供程序,它们通过支持其他文件类型来增强 Windows 文件资源管理器。有关独立的 Peek 工具的信息,请参阅Peek。
文件资源管理器加载项系统为 Windows 默认不支持的各种文件格式提供了预览和缩略图生成功能。该系统由集成到 Windows Shell 预览窗格的基于 COM 的预览处理程序、用于生成文件缩略图的缩略图提供程序以及基于 WebView2 的渲染共享基础结构组成。
文件资源管理器加载项使用混合架构,结合了 C++ COM 组件和 .NET 可执行文件进行渲染。
来源:src/modules/previewpane/SvgPreviewHandlerCpp/SvgPreviewHandler.cpp158-207 src/modules/previewpane/MarkdownPreviewHandlerCpp/MarkdownPreviewHandler.cpp158-208 src/modules/previewpane/MonacoPreviewHandlerCpp/MonacoPreviewHandler.cpp158-207
预览处理程序实现 IPreviewHandler COM 接口,以集成到 Windows Shell。每个处理程序都遵循启动单独的 .NET 可执行文件进行渲染的通用模式。
SvgPreviewHandler 为 SVG 文件提供预览功能。
SVG 处理程序包含安全功能,可阻止潜在的危险元素,如 <script>、<image> 和 <feimage> 标签。
来源:src/modules/previewpane/SvgPreviewHandlerCpp/SvgPreviewHandler.cpp src/modules/previewpane/SvgPreviewHandler/SvgPreviewControl.cs src/modules/previewpane/common/Utilities/SvgPreviewHandlerHelper.cs27-32
MarkdownPreviewHandler 使用 HTML 输出渲染 Markdown 文件。
来源:src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs119-126 src/modules/previewpane/MarkdownPreviewHandlerCpp/MarkdownPreviewHandler.cpp
MonacoPreviewHandler 使用 Monaco Editor 提供带语法高亮的代码文件预览。
来源:src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandlerControl.cs359-407 src/Monaco/index.html src/modules/previewpane/MonacoPreviewHandler/Settings.cs
缩略图提供程序为 Windows Explorer 中的文件类型生成预览图像。主要实现是 SvgThumbnailProvider。
缩略图提供程序在无头模式下使用 WebView2 渲染 SVG 内容并将其捕获为位图图像。
来源:src/modules/previewpane/SvgThumbnailProvider/SvgThumbnailProvider.cs97-217 src/modules/previewpane/SvgThumbnailProvider/SvgThumbnailProvider.cs227-241 src/modules/previewpane/SvgThumbnailProvider/SvgThumbnailProvider.cs250-278
文件资源管理器加载项支持通过 PowerToys 设置 UI 进行全面的配置。
| 设置类别 | 属性 | 描述 |
|---|---|---|
| SVG 预览 | EnableSvgPreview、SvgBackgroundColorMode、SvgBackgroundSolidColor | SVG 预览处理程序配置 |
| SVG 缩略图 | EnableSvgThumbnail | SVG 缩略图生成 |
| Markdown 预览 | EnableMdPreview | Markdown 预览处理程序 |
| Monaco 预览 | EnableMonacoPreview、MonacoPreviewWordWrap、MonacoPreviewTryFormat、MonacoPreviewMaxFileSize、MonacoPreviewFontSize、MonacoPreviewStickyScroll、MonacoPreviewMinimap | 源代码预览配置 |
| PDF 预览 | EnablePdfPreview、EnablePdfThumbnail | PDF 预览和缩略图 |
来源:src/settings-ui/Settings.UI.Library/PowerPreviewProperties.cs src/modules/previewpane/MonacoPreviewHandler/Settings.cs src/modules/previewpane/SvgPreviewHandler/Settings.cs
所有预览处理程序均使用 WebView2 进行渲染,提供了一个通用的基于 Web 的渲染平台。
关键 WebView2 安全配置
来源:src/modules/previewpane/SvgPreviewHandler/SvgPreviewControl.cs234-252 src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs146-164 src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandlerControl.cs150-189
预览处理程序注册为 COM 组件以集成到 Windows Shell。
COM 处理程序实现了以下关键接口:
IPreviewHandler - 核心预览功能IInitializeWithFile - 文件路径初始化IPreviewHandlerVisuals - 视觉主题支持IOleWindow - 窗口管理IObjectWithSite - 站点集成来源: src/modules/previewpane/SvgPreviewHandlerCpp/SvgPreviewHandler.cpp37-48 src/modules/previewpane/MarkdownPreviewHandlerCpp/MarkdownPreviewHandler.cpp37-48 src/modules/previewpane/MonacoPreviewHandlerCpp/MonacoPreviewHandler.cpp37-48
文件资源管理器加载项支持企业环境的组策略配置
| GPO 设置 | 注册表项 | 效果 |
|---|---|---|
GetConfiguredSvgPreviewEnabledValue() | SOFTWARE\Policies\Microsoft\PowerToys | 启用/禁用 SVG 预览 |
GetConfiguredMarkdownPreviewEnabledValue() | SOFTWARE\Policies\Microsoft\PowerToys | 启用/禁用 Markdown 预览 |
GetConfiguredMonacoPreviewEnabledValue() | SOFTWARE\Policies\Microsoft\PowerToys | 启用/禁用 Monaco 预览 |
GetConfiguredSvgThumbnailsEnabledValue() | SOFTWARE\Policies\Microsoft\PowerToys | 启用/禁用 SVG 缩略图 |
当配置了 GPO 策略时,它们将覆盖用户设置,并在“设置”应用程序中显示适当的 UI 指示。
来源: src/modules/previewpane/SvgPreviewHandler/SvgPreviewControl.cs98-106 src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs96-105 src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandlerControl.cs93-101