本文档介绍了 PowerToys 设置系统的架构,该系统管理所有 PowerToys 模块的用户配置。它解释了设置是如何存储、加载以及在 PowerToys Runner 进程和 Settings UI 应用程序之间进行通信的。
PowerToys 设置系统提供了一个集中式机制来存储和检索用户偏好设置。它由几个关键组件组成:
来源
所有 PowerToys 设置都以 JSON 文件的形式存储在磁盘上。每个模块都有自己的设置文件,还有一个包含应用程序范围内配置的通用设置文件。
%LOCALAPPDATA%\Microsoft\PowerToys\
├── Settings\
│ ├── settings.json # General settings
│ ├── QuickAccent\settings.json # PowerAccent settings
│ ├── FancyZones\settings.json # FancyZones settings
│ └── ... # Other module settings
每个设置文件都遵循标准格式,并包含特定于模块的属性。
对于通用设置文件(settings.json),其结构包括全局 PowerToys 配置,例如启用的模块、主题和启动行为。
来源
设置由 Settings UI 中的 C# 类和 Runner 中的 C++ 结构表示。这些模型定义了设置的结构和默认值。
来源
加载设置的过程包括:
更改设置时
来源
Settings UI 是一个 WinUI 3 应用程序,允许用户配置 PowerToys。它使用 MVVM(模型-视图-视图模型)架构:
来源
设置更改需要在 Settings UI 进程和 PowerToys Runner 进程之间进行通信。这是通过 IPC(进程间通信)机制实现的。
来源
PowerToys 支持组策略配置,适用于企业环境。GPO 规则可以覆盖用户设置。
当设置由组策略控制时
来源
PowerAccent 是 PowerToys 模块之一,拥有自己的设置部分。其设置实现展示了如何处理特定模块的设置。
来源
此图显示了从用户操作到应用程序行为的完整设置流程。
设置系统支持多种设置类型,具有不同的验证要求。
| 设置类型 | 示例 | 验证 |
|---|---|---|
| 布尔值 | "enabled": true | 无需验证 |
| 整型 | "input_time_ms": 300 | 最小值/最大值 |
| 字符串 | "theme": "dark" | 预定义值 |
| 字符串数组 | "selected_lang": "FR,SP" | 有效选项 |
| 对象 | "properties": {...} | 嵌套验证 |
来源
PowerToys 设置系统提供了一个灵活且可扩展的框架,用于管理所有 PowerToys 模块的用户偏好设置。它使用 JSON 进行存储,支持多种设置类型,并包含组策略集成等功能,适用于企业环境。该系统允许集中管理通用设置和特定模块的设置,并能正确地分离关注点。
Settings UI 中的 MVVM 架构在 UI 和底层设置数据之间提供了清晰的分离,使得系统在添加新的 PowerToys 模块时易于维护和扩展。