本文档深入探讨了 PowerToys 的核心架构,重点关注中央运行程序(Runner)、模块加载系统和 Windows 集成。它介绍了主进程 PowerToys.exe 如何协调整个套件、管理单个实用程序模块以及与 Windows shell 集成。
有关各个 PowerToys 模块及其功能的信息,请参阅 PowerToys 模块。有关设置系统和配置管理详情,请参阅 设置管理。
PowerToys 遵循一种中心辐射(hub-and-spoke)架构,其中一个中央运行程序(Runner)进程协调多个实用程序模块。该系统设计为模块化,允许各个实用程序独立加载、配置和管理,同时共享通用基础设施。
来源:src/runner/main.cpp149-180 src/runner/settings_window.cpp34-35 src/runner/tray_icon.cpp18 PowerToys.sln5-30
运行程序作为中央协调器,在 PowerToys.exe 中实现。它处理:
| 组件 | 职责 | 关键文件 |
|---|---|---|
| 主循环 | Windows 消息处理和事件处理 | src/runner/main.cpp226 |
| 模块管理 | 加载、启动和协调实用程序模块 | src/runner/main.cpp147-200 |
| 设置协调 | 管理配置并与设置 UI 进行通信 | src/runner/settings_window.cpp40-64 |
| 系统集成 | 托盘图标、启动注册、Windows 钩子 | src/runner/tray_icon.cpp272-323 |
| 进程生命周期 | 权限提升处理、重启逻辑、关机协调 | src/runner/restart_elevated.cpp16-55 |
PowerToys 使用硬编码的已知模块列表在启动时加载。该系统从特定的 DLL 文件加载模块并调用标准化的接口函数。
运行程序通过命名管道与设置 UI 通信,提供双向通信以进行配置更新和系统控制。
来源:src/runner/settings_window.cpp324-535 src/runner/settings_window.cpp170-246 src/common/interop/two_way_pipe_message_ipc.cpp
PowerToys 启动流程遵循特定顺序,以确保正确初始化和加载模块。
来源:src/runner/main.cpp319-521 src/runner/main.cpp96-236
PowerToys 在多个层面与 Windows 集成,以提供系统级功能
| 集成点 | 实现 | 目的 |
|---|---|---|
| 托盘图标 | tray_icon.cpp | 用户界面入口点、上下文菜单 |
| 全局钩子 | centralized_kb_hook.cpp、centralized_hotkeys.cpp | 系统级键盘和鼠标事件捕获 |
| Shell 扩展 | 特定模块的 DLL | 文件资源管理器上下文菜单和预览处理程序 |
| Toast 通知 | notifications.cpp | 用户反馈和更新通知 |
| COM 集成 | comUtils.cpp | Windows COM 对象交互 |
| 注册表集成 | 自动启动、设置存储 | Windows 启动和配置持久化 |
PowerToys 根据用户设置和所需功能动态处理权限提升。
来源:src/runner/main.cpp443-492 src/runner/restart_elevated.cpp16-55 src/common/utils/elevation.h
更新系统提供自动版本检查和安装功能。
来源:src/common/updating/updating.cpp86-155 src/common/updating/updating.cpp173-199 src/common/updating/updating.cpp201-244