菜单

设置系统

相关源文件

本文档介绍了 PowerToys 设置系统的架构,该系统管理所有 PowerToys 模块的用户配置。它解释了设置是如何存储、加载以及在 PowerToys Runner 进程和 Settings UI 应用程序之间进行通信的。

概述

PowerToys 设置系统提供了一个集中式机制来存储和检索用户偏好设置。它由几个关键组件组成:

  1. 设置存储 - 基于 JSON 的持久化存储用于配置
  2. 设置模型 - 定义设置结构的 C# 类
  3. 设置 UI - 用于配置 PowerToys 的 WinUI 3 界面
  4. 设置通信 - 用于进程间设置更改的 IPC 系统
  5. 组策略集成 - 企业配置支持

来源

设置存储

所有 PowerToys 设置都以 JSON 文件的形式存储在磁盘上。每个模块都有自己的设置文件,还有一个包含应用程序范围内配置的通用设置文件。

设置文件结构

%LOCALAPPDATA%\Microsoft\PowerToys\
├── Settings\
│   ├── settings.json              # General settings
│   ├── QuickAccent\settings.json  # PowerAccent settings
│   ├── FancyZones\settings.json   # FancyZones settings
│   └── ...                        # Other module settings

设置 JSON 格式

每个设置文件都遵循标准格式,并包含特定于模块的属性。

对于通用设置文件(settings.json),其结构包括全局 PowerToys 配置,例如启用的模块、主题和启动行为。

来源

设置模型

设置由 Settings UI 中的 C# 类和 Runner 中的 C++ 结构表示。这些模型定义了设置的结构和默认值。

通用设置模型

特定模块设置模型(示例:PowerAccent)

来源

设置加载与保存

加载设置

加载设置的过程包括:

  1. 从磁盘读取 JSON 文件
  2. 将其反序列化为相应的设置模型
  3. 为任何缺失的值应用默认值

保存设置

更改设置时

  1. 更新的设置模型会被序列化为 JSON
  2. JSON 会被写入相应的设置文件
  3. 更改会通知受影响的组件

来源

设置 UI 架构

Settings UI 是一个 WinUI 3 应用程序,允许用户配置 PowerToys。它使用 MVVM(模型-视图-视图模型)架构:

关键组件

  1. 设置页面 - 每个模块或部分的 XAML UI
  2. 视图模型 - 处理 UI 逻辑和设置更改
  3. 设置模型 - 定义设置的数据结构
  4. 设置存储库 - 管理设置的加载和保存
  5. 设置工具 - 用于设置的底层文件 I/O

示例设置页面流程(PowerAccent)

来源

IPC 通信

设置更改需要在 Settings UI 进程和 PowerToys Runner 进程之间进行通信。这是通过 IPC(进程间通信)机制实现的。

消息类型

  1. 通用设置传出 - 对应用程序范围设置的更改
  2. 模块设置 - 对特定模块设置的更改
  3. 自定义操作 - 特殊命令,例如重启模块

来源

组策略集成

PowerToys 支持组策略配置,适用于企业环境。GPO 规则可以覆盖用户设置。

GPO 设置强制执行

当设置由组策略控制时

  1. UI 将显示该设置为禁用状态,并带有一个信息栏
  2. Runner 将强制执行 GPO 配置的值,无论用户偏好如何
  3. 设置存储仍然会保留用户的偏好设置,以便在移除 GPO 后使用

来源

特定模块设置示例:PowerAccent

PowerAccent 是 PowerToys 模块之一,拥有自己的设置部分。其设置实现展示了如何处理特定模块的设置。

设置文件示例(PowerAccent)

PowerAccent 设置加载流程

来源

设置系统流程

此图显示了从用户操作到应用程序行为的完整设置流程。

设置类型和验证

设置系统支持多种设置类型,具有不同的验证要求。

设置类型示例验证
布尔值"enabled": true无需验证
整型"input_time_ms": 300最小值/最大值
字符串"theme": "dark"预定义值
字符串数组"selected_lang": "FR,SP"有效选项
对象"properties": {...}嵌套验证

来源

结论

PowerToys 设置系统提供了一个灵活且可扩展的框架,用于管理所有 PowerToys 模块的用户偏好设置。它使用 JSON 进行存储,支持多种设置类型,并包含组策略集成等功能,适用于企业环境。该系统允许集中管理通用设置和特定模块的设置,并能正确地分离关注点。

Settings UI 中的 MVVM 架构在 UI 和底层设置数据之间提供了清晰的分离,使得系统在添加新的 PowerToys 模块时易于维护和扩展。