菜单

创建新的 PowerToy

相关源文件

本文档提供了一份全面的指南,用于开发新的 PowerToys 模块,包括模块接口要求、集成点和开发工作流。它涵盖了创建与 PowerToys 运行器和设置系统无缝集成的 PowerToy 所需的技术实现细节。

有关创建 PowerToys Run 插件的详细信息,请参阅创建 PowerToys Run 插件。有关通用构建设置说明,请参阅从源文件构建。有关模块加载系统如何工作的详细信息,请参阅模块加载系统

PowerToys 模块架构

PowerToys 系统遵循模块化架构,其中各个实用程序作为独立的模块实现,由主运行器进程动态加载。

来源: src/runner/main.cpp149-200 src/runner/settings_window.cpp40-55 src/modules/interface/powertoy_module_interface.h src/runner/powertoy_module.h

模块接口要求

每个 PowerToy 模块都必须实现 PowertoyModuleIface 接口,该接口定义了运行器和各个模块之间的契约。

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

模块注册和加载

运行器维护一个已知的模块列表,这些模块在启动时加载。新模块必须添加到此列表中才能被系统识别。

来源: src/runner/main.cpp149-200 src/runner/powertoy_module.cpp

一步步创建新模块

1. 设置项目结构

遵循已建立的目录结构模式创建您的模块

src/modules/yourmodule/
├── dll/                          # Main module DLL project
│   ├── YourModule.vcxproj       # C++ project for module interface
│   ├── dllmain.cpp              # DLL entry point and powertoy_create()
│   └── pch.h                    # Precompiled headers
├── lib/                         # Optional: shared library code
├── ui/                          # Optional: UI components (WPF/WinUI3)
└── tests/                       # Unit tests

2. 实现模块接口

创建实现 PowertoyModuleIface 的主模块类

方法目的必需的实现
get_key()唯一的模块标识符返回常量字符串,例如 L"YourModule"
get_config()当前模块设置返回 JSON 配置对象
set_config()应用新设置解析 JSON 并更新模块状态
enable()/disable()模块生命周期启动/停止模块功能
is_enabled()状态检查返回当前启用状态
get_hotkeys()热键注册返回模块热键的向量
call_custom_action()设置操作处理来自设置 UI 的自定义命令

3. 模块工厂函数

在您的 DLL 中实现必需的工厂函数

工厂函数必须使用 C 语言链接导出,并创建您的模块类实例。模块加载器在启动过程中会调用此函数。

来源: src/runner/main.cpp186-188 src/modules/*/dll/dllmain.cpp

4. 添加到已知模块列表

在运行器的已知模块列表中注册您的模块

来源: src/runner/main.cpp149-180

设置集成

PowerToys 模块通过 JSON 配置和运行器与设置 UI 之间的 IPC 通信与设置系统集成。

来源: src/runner/settings_window.cpp150-168 src/runner/settings_window.cpp170-246

安装程序集成

新模块必须包含在安装程序配置中才能随 PowerToys 一起部署。

MSI 组件注册

将您的模块文件添加到安装程序中的相应组件组

组件组定义

在安装程序的 heat 文件或手动组件定义中为您的模块文件创建组件定义。

来源: installer/PowerToysSetup/Product.wxs54-83 installer/PowerToysSetup/*.wxs

开发工作流

构建与测试

  1. 构建主解决方案 以确保您的模块与运行器一起编译
  2. 通过在调试模式下运行运行器来测试模块加载
  3. 通过检查您的模块是否显示在设置 UI 中来验证设置集成
  4. 通过设置启用/禁用来测试模块生命周期

调试集成

将运行器项目设置为您的启动项目,并使用开发指南中记录的调试技术。如果您的模块 DLL 位于已知的模块列表中,运行器将自动加载它。

来源: doc/devdocs/readme.md124-134 src/runner/main.cpp96-99

模块模板

PowerToys 提供了一个项目模板来引导新的模块开发。该模板包括基本项目结构、接口实现存根和构建配置。

来源: tools/project_template/ doc/devdocs/readme.md135-138