菜单

核心组件

相关源文件

本文档详细介绍了 PowerToys 的核心架构组件,包括核心的 Runner 可执行文件、设置 UI 应用程序、模块加载系统和共享的基础设施库。这些组件构成了使 PowerToys 能够作为统一的工具套件运行,同时保持模块化和可扩展性的基础。

有关单个 PowerToys 模块及其功能的信息,请参阅 PowerToys 模块。有关进程间通信机制的详细信息,请参阅 进程间通信

核心 Runner (PowerToys.exe)

PowerToys Runner 是管理整个 PowerToys 套件的核心协调进程。它负责模块生命周期管理、系统集成,并通过系统托盘提供主要的 UI 界面。

核心 Runner 组件

Runner 进程从 main() 开始执行,并委托给 runner() 函数,该函数协调初始化顺序。该进程从预定义的列表中加载已知模块,建立系统挂钩,并进入主消息处理循环。

模块加载系统

Runner 维护一个已知的模块 DLL 的静态列表,并使用 load_powertoy() 函数动态加载每个模块。每个模块都必须实现 PowertoyModuleIface 接口,并提供一个 powertoy_create() 工厂函数。

来源: src/runner/main.cpp149-198 src/runner/powertoy_module.h

设置 UI (PowerToys.Settings.exe)

设置 UI 是一个独立的 WinUI3 应用程序,提供 PowerToys 的配置界面。它通过命名管道与 Runner 进程通信,以实时同步配置更改。

设置应用程序架构

设置 UI 作为独立的进程运行,当用户访问配置选项时按需启动。它通过命名管道与 Runner 建立双向通信,实现实时配置同步。

来源: src/runner/settings_window.cpp34-64 src/settings-ui/Settings.UI/

模块系统

PowerToys 采用基于插件的架构,其中各个工具实现为符合通用接口的独立模块。这种设计实现了模块化、独立开发和运行时的功能管理。

模块接口契约

每个模块都实现了 PowertoyModuleIface 接口,提供了生命周期管理、配置和事件处理的标准方法。Runner 使用这些接口方法统一管理模块,而无需考虑其内部实现。

模块生命周期管理

Runner 管理模块从创建到销毁的完整生命周期,通过标准化接口处理配置更新和状态更改。

来源: src/modules/interface/powertoy_module_interface.h src/runner/powertoy_module.cpp

共享基础设施

PowerToys 包含多个共享基础设施组件,为模块和核心系统提供通用功能。

基础设施组件

组件目的关键类/函数
通用库共享工具和辅助函数json::JsonObjectLoggerSettingsAPI
PowerToys.Interop原生/托管互操作性TwoWayPipeMessageIPC、COM 工具
更新系统版本管理和更新UpdateStatePeriodicUpdateWorker()
GPO 包装器组策略集成get_general_settings()、策略强制执行
遥测系统使用情况分析和诊断Trace::EventLaunch()、ETW 跟踪
集中式热键全局热键管理CentralizedHotkeys::PopulateHotkey()

更新系统架构

更新系统作为后台线程运行,定期检查新版本,管理更新状态,并在有可用更新时向用户发送通知。

来源: src/runner/main.cpp126-135 src/common/updating/updating.cpp src/runner/UpdateUtils.cpp

系统集成点

PowerToys 通过多种关键机制与 Windows 集成,这些机制可在保持稳定性和安全性的同时,实现深度系统集成。

Windows 集成架构

PowerToys 通过多个渠道与 Windows 集成:系统托盘管理、低级键盘钩子、用于通知的 COM 服务、用于文件资源管理器集成的 Shell 扩展,以及用于文件关联和组策略支持的注册表项。

来源: src/runner/main.cpp319-440 src/runner/tray_icon.cpp src/common/notifications/