PowerToys 是一套模块化的实用工具集,旨在提升 Windows 超级用户的生产力。本文档高级地介绍了 PowerToys,解释了其模块化架构以及代码库中的关键入口点。
PowerToys 构建为一个基于插件的系统,其核心是一个主运行可执行文件(PowerToys.exe),负责加载和管理各个实用工具模块。该系统包括一个独立的配置 UI(PowerToys.Settings.exe)、共享的基础设施库以及企业级的组策略支持。
有关 PowerToys 各个模块的详细信息,请参阅PowerToys 模块页面。有关核心架构的信息,请参阅核心架构页面。
PowerToys 是一组旨在增强 Windows 功能的实用工具集,专为超级用户设计。它包括窗口管理、快速启动应用程序、文件重命名、图像大小调整、键盘自定义等工具。PowerToys 作为后台应用程序运行,启用这些实用工具,并通过系统托盘图标进行访问。
PowerToys 包含 22 个按功能类别组织的实用工具
| 实用工具 | 模块键 | 主要功能 |
|---|---|---|
| 高级粘贴 | AdvancedPaste | 通过 AI 驱动的转换增强剪贴板操作 |
| 置顶 | 置顶 | 使窗口始终在其他窗口之上显示 |
| 颜色选取器 | 取色器 | 屏幕颜色采样和颜色格式转换 |
| 命令未找到 | CmdNotFound | 为缺失的 CLI 工具建议安装命令 |
| 命令调色板 | CmdPal | 现代命令启动器和搜索界面 |
| 裁剪和锁定 | CropAndLock | 屏幕截图裁剪和窗口叠加 |
| 环境变量 | 环境变量 | 系统环境变量的 GUI 编辑器 |
| FancyZones | FancyZones | 高级窗口布局和分屏管理器 |
| 文件资源管理器附加项 | PowerPreview | 开发者文件格式的预览处理程序 |
| 文件解锁器 | FileLocksmith | 显示哪些进程正在使用文件 |
| Hosts 文件编辑器 | Hosts | Windows hosts 文件的 GUI 编辑器 |
| 图片调整器 | 图像大小调整器 | 从上下文菜单批量调整图像大小 |
| 键盘管理器 | 键盘管理器 | 全系统按键重映射和快捷方式 |
| 鼠标实用工具 | MouseUtils | 鼠标指针增强和实用工具 |
| 无界鼠标 | 无边界鼠标 | 在多台电脑之间共享鼠标和键盘 |
| 新建+ | NewPlus | 扩展文件创建模板 |
| 粘贴为纯文本 | PastePlain | 粘贴文本时移除格式 |
| 速览 | 速览 | 通过空格键快速预览文件 |
| PowerRename | PowerRename | 支持正则表达式的批量文件重命名 |
| PowerToys 保持唤醒 | Awake | 不更改电源设置即可保持系统唤醒 |
| PowerToys Run | PowerToysRun | 带插件系统的应用程序启动器 |
| 快速重音符号 | PowerAccent | 快速访问重音符号字符 |
| 注册表预览 | RegistryPreview | 预览和编辑 Windows 注册表文件 |
| 屏幕标尺 | MeasureTool | 屏幕测量工具 |
| 快捷键指南 | 快捷键指南 | Windows 键快捷方式叠加 |
| 文本提取器 | PowerOCR | 使用 OCR 从图像中提取文本 |
| 工作区 | 工作区 | 保存和恢复应用程序布局 |
| ZoomIt | ZoomIt | 屏幕缩放和批注工具 |
PowerToys 采用模块化架构,在运行时引擎、用户界面和各个实用工具模块之间进行了明确分离。该系统旨在实现可扩展性、企业部署和可维护性。
来源:src/runner/main.cpp1-200 src/modules/interface/powertoy_module_interface.h1-100 src/common/utils/common.h1-50
PowerToys 实现了插件架构,其中 PowerToys.exe 运行程序动态加载各个实用工具模块作为 DLL。每个模块都实现了 PowerToyModuleIface 接口并遵循标准化的生命周期。
每个 PowerToys 模块都必须实现位于 src/modules/interface/ 中的 PowerToyModuleIface 接口。该接口定义了以下关键方法:
| 方法 | 目的 | 返回类型 |
|---|---|---|
powertoy_create() | 用于创建模块实例的工厂函数 | PowerToyModuleIface* |
get_key() | 返回用于设置的唯一模块标识符 | const wchar_t* |
get_name() | 返回本地化的显示名称 | const wchar_t* |
get_config() | 返回 JSON 设置架构和当前值 | const wchar_t* |
set_config(const wchar_t*) | 从 JSON 应用新设置 | void |
enable() | 启动模块功能(挂钩、UI 等) | void |
disable() | 停止模块并清理资源 | void |
is_enabled() | 返回当前启用状态 | bool |
destroy() | DLL 卸载前的最终清理 | void |
来源:src/modules/interface/powertoy_module_interface.h1-50 doc/devdocs/modules/interface.md1-100
PowerToys 实现了双进程设置架构,其中 PowerToys.Settings.exe 作为一个独立的 UI 进程,通过命名管道 IPC 与主 PowerToys.exe 运行程序通信。设置以 JSON 文件形式持久保存在用户的本地应用程序数据目录中。
PowerToys 将配置存储在结构化的 JSON 文件中
| 文件 | 位置 | 目的 |
|---|---|---|
general_settings.json | %LOCALAPPDATA%\Microsoft\PowerToys\ | 全局 PowerToys 设置,启动首选项 |
{module_key}_settings.json | 同目录 | 每个模块的配置(例如,FancyZones_settings.json) |
enabled_modules.json | 同目录 | 模块启用/禁用状态 |
backup_restore_settings.json | 同目录 | 设置备份元数据 |
来源:src/settings-ui/Settings.UI/ViewModels1-50 src/common/interop/two_way_pipe_message_ipc.h1-100 src/common/utils/settings_helpers.h1-50
PowerToys 采用两阶段安装程序架构:首先是一个处理先决条件和系统检查的引导程序 EXE,然后是一个安装核心组件的 MSI。该系统支持每用户和机器范围的安装,并带有自动更新功能。
安装程序支持用于静默安装、每用户与机器范围部署以及企业部署场景的命令行参数。
来源:installer/PowerToysSetup/PowerToys.wxs11-91 installer/PowerToysSetup/terminate_powertoys.cmd1-12 .pipelines/installWiX.ps11-26
PowerToys 为企业环境提供全面的组策略支持,允许 IT 管理员在整个组织部署中控制功能可用性、默认配置和安全策略。
策略强制执行发生在 UI 级别(禁用配置选项)和运行时级别(阻止功能激活)。这确保了无论用户尝试如何访问 PowerToys 功能,行为都保持一致。
来源:src/common/GPOWrapper1-50 README.md269
PowerToys 利用现代 Windows 开发技术,并与当前的 Microsoft 开发标准保持兼容。
| 层 | 技术 | 目的 |
|---|---|---|
| 核心运行时 | C++17, Win32 API, Windows App SDK | 原生性能,系统集成 |
| UI 框架 | WinUI 3, WebView2, XAML | 现代 Windows UI,基于 Web 的设置 |
| 构建系统 | MSBuild, Visual Studio 2022, WiX Toolset | 编译,打包,部署 |
| 包管理 | NuGet, vcpkg, Directory.Packages.props | 依赖管理 |
| 互操作 | C++/WinRT, Windows Runtime | COM 集成,现代 Windows API |
| 测试 | MSTest, Google Test | 单元测试,集成测试 |
| 组件 | 版本约束 | 用途 |
|---|---|---|
Microsoft.WindowsAppSDK | 最新稳定版 | 设置 UI,现代 Windows 功能 |
Microsoft.Windows.CppWinRT | 最新版 | 所有 Windows Runtime 的 C++ 模块 |
CommunityToolkit.WinUI | 最新版 | 设置 UI 控件和帮助程序 |
StreamJsonRpc | 最新版 | 运行程序和设置 UI 之间的 IPC |
System.Text.Json | 最新版 | 配置序列化 |
WinUIEx | 最新版 | 扩展 WinUI 控件 |
PowerToys 通过 Directory.Packages.props 实现集中式包管理,以确保所有项目中的版本一致性。构建系统支持:
来源:Directory.Packages.props1-110 doc/devdocs/readme.md40-47
PowerToys 是一个活跃的开源项目,拥有社区的积极参与。该项目欢迎社区贡献,包括代码、文档、设计和错误查找。对于有兴趣贡献的人,可以参考detailed contributor's guide。
PowerToys 团队感谢众多社区成员的贡献,他们帮助开发实用工具、修复错误并改进了整体体验。
来源:COMMUNITY.md1-41 README.md80-88
PowerToys 代码库组织在几个关键目录中:
| 目录 | 描述 |
|---|---|
/src/runner | 包含 PowerToys.exe 可执行文件 |
/src/modules | 包含各个 PowerToys 模块 |
/src/settings-ui | 包含设置 UI 应用程序 |
/src/common | 包含多个组件使用的共享代码 |
/installer | 包含安装程序项目 |
/tools | 包含开发工具和实用程序 |
有关 PowerToys 开发的更多详细信息,包括如何从源代码构建、创建新模块以及调试应用程序,请参阅开发指南页面。
来源:doc/devdocs/readme.md37-47 doc/devdocs/common.md
PowerToys 使用各种包和依赖项来实现其功能。其中包括:
完整的包及其版本列表保存在 Directory.Packages.props 文件中。
来源:Directory.Packages.props1-110
PowerToys 与 Windows 组策略集成,允许管理员在企业环境中控制 PowerToys 功能的可用性和配置。这使得 IT 管理员能够跨组织标准化 PowerToys 的体验。
有关组策略集成的更多信息,请参阅组策略集成页面。
来源:README.md9