菜单

PowerToys Run

相关源文件

PowerToys Run 是 PowerToys 套件中的一个启动器实用程序,它通过简化的键盘驱动界面使用户能够快速搜索和启动应用程序、文件并执行各种操作。本文档涵盖了 PowerToys Run 的架构、组件和功能。有关 PowerToys Run 插件开发的信息,请参阅创建 PowerToys Run 插件

概述

PowerToys Run 提供了一个快速启动器界面,可通过自定义键盘快捷键(默认:Alt+Space)激活。它通过基于插件的架构处理用户查询,其中每个插件处理特定类型的搜索(应用程序、文件、计算等)并返回与查询匹配的结果。

PowerToys Run 工作流程

来源

系统架构

PowerToys Run 由几个核心组件构成,这些组件协同工作以提供其功能。

PowerToys Run 类关系

来源

核心组件

PowerToys Run 构建于几个关键组件之上

组件描述关键类
UI 层提供用于输入和结果显示的 UIMainWindowLauncherControlResultList
视图模型层处理 UI 逻辑和数据处理MainViewModelResultsViewModelResultViewModel
插件系统通过插件实现可扩展性PluginManagerPluginPairIPlugin
设置系统管理用户偏好设置和配置PowerToysRunSettingsSettingsReader
遥测提供使用指标PowerToysTelemetryLauncherEventLogger

来源

初始化与启动

PowerToys Run 启动时,它会遵循一个结构化的初始化序列

PowerToys Run 初始化序列

来源

在初始化期间,PowerToys Run 执行以下关键步骤

  1. 使用 SettingsReader 从磁盘加载设置
  2. 使用这些设置初始化 MainViewModel
  3. 创建 MainWindow 并将其连接到视图模型
  4. 通过 PluginManager.InitializePlugins() 初始化插件系统
  5. 注册配置的热键以激活
  6. 设置搜索文本框,使其具有适当的响应设置

来源

插件系统

PowerToys Run 使用基于插件的架构,允许通过新功能进行扩展。每个插件负责处理特定类型的查询(文件搜索、应用程序搜索、计算等)。

插件架构

插件系统架构

来源

在 PowerToys Run 初始化期间加载插件。PluginManager 会扫描插件目录并为找到的每个插件创建一个 PluginPairPluginPair 包含插件元数据和插件实现。

- Preinstalled Directory: Internal plugins that come with PowerToys
- Plugins Directory: User-installed plugins

来源

插件加载过程

插件加载过程遵循以下步骤

  1. 解析插件目录中的插件配置文件 (plugin.json)
  2. 为每个插件创建 PluginPair 实例
  3. 使用公共 API 初始化每个非禁用插件
  4. 处理插件故障并将其报告给用户

来源

插件类型和接口

PowerToys Run 支持多种插件接口

接口描述
IPlugin所有插件都必须实现的基本插件接口
IContextMenu允许插件为结果提供上下文菜单项
ISettingProvider使插件能够提供自定义设置
IDelayedExecutionPlugin支持需要延迟执行以提高性能的插件
IReloadable可以重新加载其数据的插件

来源

查询处理

当用户在 PowerToys Run 中键入查询时,系统会处理输入并从插件检索相关结果。

查询处理流程

来源

查询生命周期

  1. 输入检测:UI 检测搜索框中的文本更改
  2. 查询创建:文本被传递给 MainViewModel,它会创建一个查询
  3. 插件匹配:查询被分派给合适的插件
  4. 初始结果:快速结果会立即返回
  5. 延迟结果:较慢、更复杂的结果在后台处理
  6. 结果排序:结果根据相关性、历史记录和权重进行排序
  7. UI 更新:UI 会使用排序后的结果进行更新

来源

延迟执行以提高性能

PowerToys Run 使用双执行方法来保持响应性

  1. 快速执行:即时查询执行以获得快速结果
  2. 延迟执行:二次查询执行以获得更复杂或资源密集型搜索

此方法由以下设置控制

  • SearchQueryResultsWithDelay:启用/禁用延迟执行
  • SearchInputDelay:在执行延迟搜索之前等待的毫秒数
  • SearchInputDelayFast:在执行快速搜索之前等待的毫秒数

来源

结果管理

PowerToys Run 使用一个复杂的系统来管理、显示和交互搜索结果。

结果数据结构

来源

结果渲染与UI

ResultsViewModel 负责管理结果集,而 ResultViewModel 则封装单个结果,提供 UI 相关功能,如选择、上下文菜单和视觉格式化。

主要功能包括

  1. 结果导航:使用键盘(上/下箭头)在结果之间导航
  2. 上下文菜单管理:为结果提供和管理上下文操作
  3. 视觉格式化:通过高亮匹配文本来格式化结果标题
  4. 结果选择:跟踪当前选中的结果
  5. 结果激活:在结果被激活时执行操作

来源

结果排序与排名

结果基于以下几个因素进行排序:

  • 得分:插件提供的相关性得分
  • 权重提升:来自插件元数据的权重调整
  • 已选次数:用户之前选择此结果的次数
  • 搜索点击项权重:用户可配置的先前点击项的权重

排序算法实现在 ResultsViewModel.Sort() 方法中

来源

UI 组件

PowerToys Run 包含几个提供用户界面的关键 UI 组件。

主窗口

MainWindow 是主要的 UI 容器,它承载搜索框和结果列表。它是一个无边框的置顶窗口,在按下热键时出现。

主要功能

  • 自定义窗口外观和样式
  • 根据用户偏好(光标、主显示器或焦点)进行定位
  • 失焦时自动隐藏
  • 支持主题(浅色、深色、高对比度)

来源

搜索框是用户输入查询的主要控件,由 LauncherControl 类实现。

主要功能

  • 自动完成
  • 占位符文本
  • 支持 RTL(从右到左)语言
  • 图标显示

来源

结果列表

结果列表显示插件匹配到的结果,由 ResultList 类实现。

主要功能

  • 虚拟滚动以提高性能
  • 项目模板以实现一致的显示
  • 支持结果操作的上下文菜单
  • 选择高亮

来源

设置和配置

PowerToys Run 通过 PowerToys 设置界面提供了广泛的配置选项。

设置系统架构

来源

核心设置

PowerToys Run 支持众多设置,包括:

设置类别示例描述
激活函数热键、UseCentralizedKeyboardHook控制 PowerToys Run 的激活方式
外观主题、TitleFontSize、MaxResultsToShow控制视觉外观
行为ClearInputOnLaunch、HideWhenDeactivated控制操作行为
性能SearchQueryResultsWithDelay、SearchInputDelay控制搜索性能/响应能力
插件单个插件设置插件特定配置

来源

插件设置

每个插件都可以通过 ISettingProvider 接口提供自己的设置。这些设置存储在同一个设置文件中,并在插件更新时进行更新。

插件设置包括:

  • 启用/禁用状态
  • 操作关键字(适用于非全局插件)
  • 结果排名的权重提升
  • 插件特定的附加选项

来源

主题和 UI 自定义

PowerToys Run 支持多种主题,以匹配 Windows 主题或用户偏好。

主题系统

来源

ThemeManager 类负责根据以下条件应用相应的主题:

  1. 设置中的用户主题偏好
  2. 如果设置为“系统”,则为系统主题
  3. 如果 Windows 中启用了高对比度设置

来源

总结

PowerToys Run 通过以下方式为 Windows 提供强大而灵活的启动器:

  1. 强大的插件架构,支持扩展
  2. 高效的查询处理,支持即时和延迟执行
  3. 复杂的目录管理,支持上下文操作
  4. 可自定义的 UI,支持主题
  5. 全面的设置以满足用户偏好

该系统的模块化设计允许持续的扩展和增强,使其成为 PowerToys 套件中的强大工具。