菜单

概述

相关源文件

PowerToys 是一套模块化的实用工具集,旨在提升 Windows 超级用户的生产力。本文档高级地介绍了 PowerToys,解释了其模块化架构以及代码库中的关键入口点。

PowerToys 构建为一个基于插件的系统,其核心是一个主运行可执行文件(PowerToys.exe),负责加载和管理各个实用工具模块。该系统包括一个独立的配置 UI(PowerToys.Settings.exe)、共享的基础设施库以及企业级的组策略支持。

有关 PowerToys 各个模块的详细信息,请参阅PowerToys 模块页面。有关核心架构的信息,请参阅核心架构页面。

什么是 PowerToys?

PowerToys 是一组旨在增强 Windows 功能的实用工具集,专为超级用户设计。它包括窗口管理、快速启动应用程序、文件重命名、图像大小调整、键盘自定义等工具。PowerToys 作为后台应用程序运行,启用这些实用工具,并通过系统托盘图标进行访问。

系统要求

  • Windows 11 或 Windows 10 版本 2004(内部版本 19041)或更高版本
  • x64 或 ARM64 处理器
  • Microsoft Edge WebView2 运行时(自动安装)

来源:README.md26-32

可用实用工具

PowerToys 包含 22 个按功能类别组织的实用工具

实用工具模块键主要功能
高级粘贴AdvancedPaste通过 AI 驱动的转换增强剪贴板操作
置顶置顶使窗口始终在其他窗口之上显示
颜色选取器取色器屏幕颜色采样和颜色格式转换
命令未找到CmdNotFound为缺失的 CLI 工具建议安装命令
命令调色板CmdPal现代命令启动器和搜索界面
裁剪和锁定CropAndLock屏幕截图裁剪和窗口叠加
环境变量环境变量系统环境变量的 GUI 编辑器
FancyZonesFancyZones高级窗口布局和分屏管理器
文件资源管理器附加项PowerPreview开发者文件格式的预览处理程序
文件解锁器FileLocksmith显示哪些进程正在使用文件
Hosts 文件编辑器HostsWindows hosts 文件的 GUI 编辑器
图片调整器图像大小调整器从上下文菜单批量调整图像大小
键盘管理器键盘管理器全系统按键重映射和快捷方式
鼠标实用工具MouseUtils鼠标指针增强和实用工具
无界鼠标无边界鼠标在多台电脑之间共享鼠标和键盘
新建+NewPlus扩展文件创建模板
粘贴为纯文本PastePlain粘贴文本时移除格式
速览速览通过空格键快速预览文件
PowerRenamePowerRename支持正则表达式的批量文件重命名
PowerToys 保持唤醒Awake不更改电源设置即可保持系统唤醒
PowerToys RunPowerToysRun带插件系统的应用程序启动器
快速重音符号PowerAccent快速访问重音符号字符
注册表预览RegistryPreview预览和编辑 Windows 注册表文件
屏幕标尺MeasureTool屏幕测量工具
快捷键指南快捷键指南Windows 键快捷方式叠加
文本提取器PowerOCR使用 OCR 从图像中提取文本
工作区工作区保存和恢复应用程序布局
ZoomItZoomIt屏幕缩放和批注工具

来源:README.md11-22

高层架构

PowerToys 采用模块化架构,在运行时引擎、用户界面和各个实用工具模块之间进行了明确分离。该系统旨在实现可扩展性、企业部署和可维护性。

核心架构组件

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 RuntimeCOM 集成,现代 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 实现集中式包管理,以确保所有项目中的版本一致性。构建系统支持:

  • 多目标编译:x64 和 ARM64 架构
  • 配置变体:调试、发布,可选 PGO(配置文件引导优化)
  • 代码签名:用于官方发布的 ESRP(企业签名)
  • 本地化:支持 40 多种语言的基于资源的翻译

来源: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 使用各种包和依赖项来实现其功能。其中包括:

  • Microsoft Windows App SDK
  • Microsoft.Windows.CppWinRT
  • CommunityToolkit 库
  • StreamJsonRpc
  • System.Text.Json
  • WinUIEx

完整的包及其版本列表保存在 Directory.Packages.props 文件中。

来源:Directory.Packages.props1-110

组策略集成

PowerToys 与 Windows 组策略集成,允许管理员在企业环境中控制 PowerToys 功能的可用性和配置。这使得 IT 管理员能够跨组织标准化 PowerToys 的体验。

有关组策略集成的更多信息,请参阅组策略集成页面。

来源:README.md9