2558 lines
49 KiB
Markdown
2558 lines
49 KiB
Markdown
# Windows 个人工具箱软件开发设计文档
|
||
|
||
> 本文档用于指导 Codex 或其他代码生成工具进行开发。
|
||
> 目标是开发一款轻量、稳定、常驻托盘、支持系统工具、本地工具、网址、组合、自动运行和全局快捷键的 Windows 平台个人工具箱软件。
|
||
> 本软件不是软件管家、不是任务调度器、不是插件平台、不是进程监控器,而是一个面向个人高频使用场景的本地工具启动与组合管理器。
|
||
|
||
---
|
||
|
||
## 1. 产品概述
|
||
|
||
### 1.1 产品名称
|
||
|
||
暂定名:**个人工具箱** / **Personal Toolbox**
|
||
|
||
实际开发时可使用临时代号:
|
||
|
||
```text
|
||
ToolboxApp
|
||
```
|
||
|
||
### 1.2 产品定位
|
||
|
||
本软件是一款 Windows 平台个人工具箱应用,主要用于集中管理和快速启动用户常用的系统工具、本地程序、本地文件、文件夹、脚本、网址,以及由多个工具组成的组合。
|
||
|
||
软件常驻系统托盘,可设置开机自启。用户可以通过托盘图标显示或隐藏主界面,也可以通过全局快捷键直接启动某个工具或组合。
|
||
|
||
### 1.3 核心价值
|
||
|
||
本软件要解决的问题不是“发现软件”,而是“整理和快速启动用户已经知道自己需要的东西”。
|
||
|
||
核心价值包括:
|
||
|
||
1. **集中管理**
|
||
将系统工具、本地工具、网址、组合集中在一个统一界面中。
|
||
|
||
2. **快速启动**
|
||
用户通过双击卡片、快捷键、组合、启动时自动运行等方式快速打开目标。
|
||
|
||
3. **组合启动**
|
||
用户可以把多个工具打包为组合,例如“一键打开剪辑环境”“一键打开开发环境”。
|
||
|
||
4. **托盘常驻**
|
||
软件长期隐藏在托盘,不占用任务栏空间,随时可唤出。
|
||
|
||
5. **开机自动运行**
|
||
工具箱可设置开机自启,并在启动后按用户设置自动运行指定工具或组合。
|
||
|
||
6. **轻量可控**
|
||
不做自动扫描,不做云同步,不做复杂插件系统,不做过度功能。
|
||
|
||
---
|
||
|
||
## 2. 设计原则
|
||
|
||
### 2.1 轻量优先
|
||
|
||
软件应保持轻量。功能服务于“启动和组合启动工具”,不要扩展成软件管家、脚本平台或自动化平台。
|
||
|
||
### 2.2 本地优先
|
||
|
||
所有数据保存在本地配置文件中。第一版不做账号、不做云同步、不依赖远程服务。
|
||
|
||
### 2.3 用户可理解优先
|
||
|
||
用户界面上不应暴露过多技术概念。
|
||
例如 exe、lnk、bat、cmd、mp4、docx、文件夹等,在用户侧统一称为“本地工具”。软件内部可自动判断子类型,但用户添加时不需要理解这些差异。
|
||
|
||
### 2.4 避免误操作
|
||
|
||
工具卡片采用:
|
||
|
||
```text
|
||
单击 = 选中
|
||
双击 = 启动
|
||
```
|
||
|
||
不要单击即启动,避免用户误触导致程序、组合或多个工具被打开。
|
||
|
||
### 2.5 组合使用引用,不自包含
|
||
|
||
组合内部只保存工具或组合的 ID 引用,不复制工具内容。
|
||
这样工具改名、换路径、换图标后,所有引用该工具的组合都会同步生效。
|
||
|
||
### 2.6 不弹窗打断用户
|
||
|
||
普通启动信息、组合执行进度、自动运行结果、错误提示,统一输出到主界面底部的信息输出区。
|
||
除删除确认、重大破坏性操作、必要系统权限提示外,尽量不弹窗。
|
||
|
||
### 2.7 所有启动入口行为一致
|
||
|
||
无论用户通过双击卡片、全局快捷键、组合、启动时自动运行触发工具,都必须统一走同一个启动服务。
|
||
|
||
建议核心服务命名:
|
||
|
||
```text
|
||
ToolLaunchService
|
||
```
|
||
|
||
---
|
||
|
||
## 3. MVP 范围
|
||
|
||
### 3.1 第一版必须包含
|
||
|
||
第一版必须实现以下功能。
|
||
|
||
#### 3.1.1 托盘常驻
|
||
|
||
- 软件可以常驻系统托盘。
|
||
- 支持设置开机自启。
|
||
- 启动后可默认隐藏到托盘。
|
||
- 单击托盘图标显示 / 隐藏主界面。
|
||
- 关闭主窗口时隐藏到托盘,不退出软件。
|
||
- 真正退出只能通过托盘右键菜单中的“退出”。
|
||
- 托盘菜单保持极简:
|
||
- 显示 / 隐藏主界面
|
||
- 全局快捷键开启 / 关闭
|
||
- 设置
|
||
- 退出
|
||
|
||
#### 3.1.2 主界面
|
||
|
||
主界面采用:
|
||
|
||
```text
|
||
顶部搜索与操作按钮
|
||
左侧一级分类
|
||
右侧卡片网格
|
||
底部信息输出区
|
||
```
|
||
|
||
主界面必须支持:
|
||
|
||
- 搜索工具。
|
||
- 显示分类。
|
||
- 显示工具卡片。
|
||
- 单击卡片选中。
|
||
- 双击卡片启动。
|
||
- 右键卡片管理。
|
||
- 底部信息输出。
|
||
- 基础键盘操作。
|
||
|
||
#### 3.1.3 工具类型
|
||
|
||
用户侧只暴露四类:
|
||
|
||
1. 系统工具
|
||
2. 本地工具
|
||
3. 网址
|
||
4. 组合
|
||
|
||
其中:
|
||
|
||
- exe、lnk、bat、cmd、普通文件、文件夹都统一归为本地工具。
|
||
- Microsoft Store 应用第一版建议通过快捷方式 `.lnk` 添加,也归为本地工具。
|
||
- 组合也是一种工具,也以卡片形式展示。
|
||
|
||
#### 3.1.4 系统工具
|
||
|
||
- 软件首次启动时默认创建“系统工具”分类。
|
||
- 常见 Windows 系统工具默认全部显示在该分类中。
|
||
- 用户可以改名、换图标、移动分类、设置快捷键、设置是否自动运行。
|
||
- 用户可以删除或隐藏默认系统工具。
|
||
- 设置界面提供“一键恢复默认系统工具”。
|
||
- 恢复默认系统工具时,只补回缺失项,不重复创建已有项。
|
||
|
||
#### 3.1.5 本地工具
|
||
|
||
本地工具包括:
|
||
|
||
- exe 程序
|
||
- lnk 快捷方式
|
||
- bat / cmd 脚本
|
||
- 普通文件
|
||
- 文件夹
|
||
- Microsoft Store 应用快捷方式
|
||
- 其他可由 Windows Shell 打开的目标
|
||
|
||
本地工具第一版尽量使用 Windows Shell 打开,由 Windows 决定具体打开方式。
|
||
|
||
#### 3.1.6 网址工具
|
||
|
||
- 用户可以添加 URL。
|
||
- 启动时使用系统默认浏览器打开。
|
||
- 第一版不需要支持指定浏览器打开。
|
||
|
||
#### 3.1.7 组合工具
|
||
|
||
组合工具必须支持:
|
||
|
||
- 引用已有工具或组合。
|
||
- 允许嵌套组合。
|
||
- 检测循环引用。
|
||
- 检测展开后重复工具。
|
||
- 设置成员顺序。
|
||
- 设置成员之间的时间间隔。
|
||
- 临时启用 / 禁用某个成员。
|
||
- 设置失败处理方式:
|
||
- 失败后继续执行后续成员。
|
||
- 失败后停止整个组合。
|
||
- 组合本身可设置全局快捷键。
|
||
- 组合本身可加入工具箱启动时自动运行。
|
||
|
||
#### 3.1.8 工具箱启动时自动运行
|
||
|
||
每个工具或组合自身可设置:
|
||
|
||
```text
|
||
工具箱启动时自动运行:是 / 否
|
||
```
|
||
|
||
设置界面动态汇总所有启用自动运行的工具和组合,形成自动运行列表。
|
||
|
||
自动运行列表支持:
|
||
|
||
- 调整执行顺序。
|
||
- 设置每项之间的时间间隔。
|
||
- 临时启用 / 禁用。
|
||
- 从自动运行中移除。
|
||
|
||
自动运行列表不提供失败中断功能。
|
||
某项失败后,记录到底部信息区,然后继续执行下一项。
|
||
如果某项是组合,则组合内部是否中断由组合自身的失败处理规则决定。
|
||
|
||
#### 3.1.9 全局快捷键
|
||
|
||
每个工具和组合都可以设置一个全局快捷键。
|
||
|
||
要求:
|
||
|
||
- 快捷键仅在工具箱运行时生效。
|
||
- 支持设置界面统一管理快捷键。
|
||
- 支持工具编辑界面单独设置快捷键。
|
||
- 托盘菜单和设置界面都提供全局快捷键总开关。
|
||
- 关闭总开关时,所有快捷键临时失效,但不删除配置。
|
||
- 开启总开关时重新注册快捷键。
|
||
- 必须检测软件内部快捷键冲突。
|
||
- 必须处理系统注册失败,例如被其他软件占用。
|
||
- 第一版不支持单键快捷键,要求至少包含一个修饰键。
|
||
|
||
建议支持的修饰键:
|
||
|
||
```text
|
||
Ctrl
|
||
Alt
|
||
Shift
|
||
Win
|
||
```
|
||
|
||
#### 3.1.10 数据保存
|
||
|
||
- 使用本地 JSON 文件保存。
|
||
- 不做数据库。
|
||
- 不做账号。
|
||
- 不做云同步。
|
||
- 图标文件单独保存在 icons 目录。
|
||
- 支持导入配置。
|
||
- 支持导出配置。
|
||
- 支持重置配置。
|
||
- 支持打开配置目录。
|
||
- 导入配置后检测路径失效。
|
||
|
||
#### 3.1.11 图标
|
||
|
||
- 默认自动获取图标。
|
||
- exe 尽量提取程序图标。
|
||
- lnk 尽量读取快捷方式图标或目标图标。
|
||
- 文件使用系统默认文件类型图标。
|
||
- 文件夹使用文件夹图标。
|
||
- 网址使用默认链接图标,后续可扩展 favicon。
|
||
- 组合使用内置组合图标。
|
||
- 系统工具使用内置系统工具图标。
|
||
- 提供轻量内置图标库。
|
||
- 用户可以从图标库选择图标。
|
||
- 用户可以选择本地图片或 ico 作为图标。
|
||
- 分类也可以设置图标。
|
||
|
||
### 3.2 第一版明确不做
|
||
|
||
第一版不做以下功能:
|
||
|
||
- 插件系统。
|
||
- 账号系统。
|
||
- 云同步。
|
||
- 自动扫描已安装软件。
|
||
- 自动扫描开始菜单。
|
||
- 复杂脚本命令编辑器。
|
||
- 直接输入命令作为工具。
|
||
- 多级分类。
|
||
- 托盘菜单中的最近使用工具。
|
||
- 托盘菜单中的常用工具。
|
||
- 复杂历史日志管理。
|
||
- 进程监控。
|
||
- 判断目标程序运行后是否崩溃。
|
||
- 判断脚本业务执行是否成功。
|
||
- 对工具启动结果做深度跟踪。
|
||
- 插件市场。
|
||
- 图标素材市场。
|
||
- 多用户权限系统。
|
||
|
||
---
|
||
|
||
## 4. 技术方向
|
||
|
||
### 4.1 推荐技术栈
|
||
|
||
建议使用:
|
||
|
||
```text
|
||
WPF + .NET
|
||
```
|
||
|
||
开发语言:
|
||
|
||
```text
|
||
C#
|
||
```
|
||
|
||
架构模式建议:
|
||
|
||
```text
|
||
MVVM
|
||
```
|
||
|
||
UI 风格建议:
|
||
|
||
```text
|
||
现代 Fluent 风格
|
||
```
|
||
|
||
可以使用成熟 WPF UI 控件库,但不应让控件库决定业务结构。业务层应保持独立。
|
||
|
||
### 4.2 为什么选择 WPF / .NET
|
||
|
||
原因:
|
||
|
||
1. 与 Windows 系统集成自然。
|
||
2. 托盘图标、自启、快捷键、进程启动、文件路径处理都方便。
|
||
3. 比 Electron 更轻量。
|
||
4. 适合个人工具箱这种常驻桌面软件。
|
||
5. 后续维护成本低。
|
||
|
||
### 4.3 权限策略
|
||
|
||
工具箱自身默认以普通权限运行。
|
||
|
||
每个工具可以单独配置:
|
||
|
||
```text
|
||
以管理员身份运行:是 / 否
|
||
```
|
||
|
||
组合执行时,每个成员按自己的权限配置启动。
|
||
组合本身不统一提权。
|
||
|
||
如果用户启动某个需要管理员权限的工具,则由 Windows 弹出 UAC。
|
||
用户取消 UAC 时,启动失败信息写入底部信息区。
|
||
|
||
---
|
||
|
||
## 5. 用户界面设计
|
||
|
||
## 5.1 主界面总体结构
|
||
|
||
主界面结构:
|
||
|
||
```text
|
||
┌────────────────────────────────────────────┐
|
||
│ 顶部:搜索框 + 操作按钮 │
|
||
├──────────────┬─────────────────────────────┤
|
||
│ 左侧分类列表 │ 右侧工具 / 组合卡片网格 │
|
||
│ │ │
|
||
├──────────────┴─────────────────────────────┤
|
||
│ 底部信息输出区 │
|
||
└────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.1.1 顶部区域
|
||
|
||
顶部包含:
|
||
|
||
- 搜索框
|
||
- 添加工具
|
||
- 添加组合
|
||
- 启动
|
||
- 编辑
|
||
- 删除
|
||
- 设置
|
||
|
||
建议布局:
|
||
|
||
```text
|
||
[搜索工具...] [添加工具] [添加组合] [启动] [编辑] [删除] [设置]
|
||
```
|
||
|
||
按钮行为:
|
||
|
||
- 未选中卡片时,“启动 / 编辑 / 删除”禁用。
|
||
- 选中卡片后,“启动 / 编辑 / 删除”启用。
|
||
- 搜索框支持 Ctrl + F 聚焦。
|
||
|
||
### 5.1.2 左侧分类列表
|
||
|
||
分类只支持一级分类。
|
||
|
||
分类功能:
|
||
|
||
- 新建分类。
|
||
- 重命名分类。
|
||
- 删除分类。
|
||
- 拖拽排序。
|
||
- 设置分类图标。
|
||
- 每个工具或组合只能属于一个分类。
|
||
|
||
默认分类:
|
||
|
||
```text
|
||
系统工具
|
||
未分类
|
||
```
|
||
|
||
规则:
|
||
|
||
- “未分类”固定存在,不允许删除。
|
||
- “系统工具”首次启动时创建。
|
||
- “系统工具”可以改名,可以调整排序。
|
||
- 如果恢复默认系统工具时“系统工具”分类不存在,则自动重新创建。
|
||
|
||
删除分类时:
|
||
|
||
- 不直接删除其中工具。
|
||
- 应提示用户:该分类中的工具将移动到“未分类”。
|
||
- 用户确认后执行移动。
|
||
|
||
### 5.1.3 右侧卡片网格
|
||
|
||
卡片显示内容:
|
||
|
||
- 图标
|
||
- 名称
|
||
- 简短说明
|
||
- 类型标记
|
||
- 状态标记
|
||
|
||
类型标记包括:
|
||
|
||
```text
|
||
系统
|
||
本地
|
||
网址
|
||
组合
|
||
```
|
||
|
||
状态标记包括:
|
||
|
||
```text
|
||
路径失效
|
||
已设快捷键
|
||
自动运行
|
||
管理员
|
||
```
|
||
|
||
卡片交互:
|
||
|
||
```text
|
||
单击:选中
|
||
双击:启动
|
||
右键:打开菜单
|
||
拖拽:排序或移动分类
|
||
```
|
||
|
||
右键菜单建议:
|
||
|
||
```text
|
||
启动
|
||
编辑
|
||
重命名
|
||
复制
|
||
移动到分类
|
||
加入 / 取消工具箱启动时自动运行
|
||
删除
|
||
```
|
||
|
||
### 5.1.4 底部信息输出区
|
||
|
||
底部信息区常驻主界面底部。
|
||
|
||
用途:
|
||
|
||
- 显示普通工具启动结果。
|
||
- 显示组合执行进度。
|
||
- 显示自动运行执行结果。
|
||
- 显示启动失败原因。
|
||
- 显示快捷键注册失败。
|
||
- 显示导入导出结果。
|
||
- 显示路径失效检查结果。
|
||
- 显示系统工具恢复结果。
|
||
|
||
信息格式建议:
|
||
|
||
```text
|
||
[10:21:03] 启动组合:剪辑工作区
|
||
[10:21:03] ✓ 打开:素材文件夹
|
||
[10:21:04] ✓ 打开:剪映
|
||
[10:21:07] ✕ 打开失败:音乐素材库,路径不存在
|
||
[10:21:07] 继续执行后续工具
|
||
[10:21:08] ✓ 打开:浏览器参考页
|
||
[10:21:08] 组合执行完成:成功 3 项,失败 1 项
|
||
```
|
||
|
||
底部信息区功能:
|
||
|
||
- 清空。
|
||
- 复制。
|
||
- 折叠 / 展开。
|
||
- 默认只保存本次运行日志。
|
||
|
||
第一版不需要复杂历史日志系统。
|
||
|
||
---
|
||
|
||
## 5.2 工具编辑弹窗
|
||
|
||
工具编辑弹窗用于编辑:
|
||
|
||
- 系统工具
|
||
- 本地工具
|
||
- 网址工具
|
||
|
||
组合工具使用单独的组合编辑界面。
|
||
|
||
### 5.2.1 基础字段
|
||
|
||
所有普通工具都包含:
|
||
|
||
```text
|
||
名称
|
||
图标
|
||
所属分类
|
||
说明 / 备注
|
||
快捷键
|
||
是否工具箱启动时自动运行
|
||
```
|
||
|
||
快捷键区域:
|
||
|
||
```text
|
||
快捷键:未设置
|
||
[录入快捷键] [清除]
|
||
```
|
||
|
||
自动运行区域:
|
||
|
||
```text
|
||
□ 工具箱启动时自动运行
|
||
```
|
||
|
||
注意:普通工具编辑界面不设置自动运行延迟。
|
||
自动运行顺序与间隔统一在设置界面的自动运行列表中管理。
|
||
|
||
### 5.2.2 系统工具字段
|
||
|
||
系统工具显示:
|
||
|
||
```text
|
||
系统工具标识
|
||
内置启动方式
|
||
是否管理员运行
|
||
```
|
||
|
||
系统工具的启动标识可以显示,但默认不建议用户修改。
|
||
|
||
允许用户修改:
|
||
|
||
- 名称
|
||
- 图标
|
||
- 分类
|
||
- 说明
|
||
- 快捷键
|
||
- 是否自动运行
|
||
- 是否管理员运行
|
||
|
||
### 5.2.3 本地工具字段
|
||
|
||
本地工具显示:
|
||
|
||
```text
|
||
目标路径
|
||
工作目录
|
||
启动参数
|
||
是否以管理员身份运行
|
||
```
|
||
|
||
高级设置默认折叠。
|
||
|
||
建议显示逻辑:
|
||
|
||
- exe / bat / cmd / lnk:显示启动参数、工作目录、管理员运行。
|
||
- 普通文件:隐藏或折叠启动参数、工作目录。
|
||
- 文件夹:隐藏启动参数。
|
||
- 未知类型:优先交给 Windows Shell 打开。
|
||
|
||
### 5.2.4 网址工具字段
|
||
|
||
网址工具显示:
|
||
|
||
```text
|
||
网址
|
||
```
|
||
|
||
第一版只使用默认浏览器打开,不做指定浏览器。
|
||
|
||
---
|
||
|
||
## 5.3 组合编辑界面
|
||
|
||
组合编辑界面建议使用较大的独立窗口,不建议塞进普通工具编辑弹窗。
|
||
|
||
### 5.3.1 组合基础字段
|
||
|
||
组合包含:
|
||
|
||
```text
|
||
组合名称
|
||
图标
|
||
所属分类
|
||
说明 / 备注
|
||
快捷键
|
||
是否工具箱启动时自动运行
|
||
```
|
||
|
||
### 5.3.2 组合成员列表
|
||
|
||
组合成员只能从已有工具或组合中选择。
|
||
|
||
组合成员字段:
|
||
|
||
```text
|
||
成员工具 ID
|
||
是否启用
|
||
排序
|
||
当前成员执行后等待间隔
|
||
```
|
||
|
||
界面上建议显示:
|
||
|
||
```text
|
||
启用 | 图标 | 名称 | 类型 | 间隔 | 操作
|
||
```
|
||
|
||
支持:
|
||
|
||
- 添加成员。
|
||
- 移除成员。
|
||
- 启用 / 禁用成员。
|
||
- 拖拽调整顺序。
|
||
- 设置成员执行后的等待间隔。
|
||
|
||
### 5.3.3 组合失败处理
|
||
|
||
组合级设置:
|
||
|
||
```text
|
||
失败处理方式:
|
||
○ 某项失败后继续执行后续工具
|
||
○ 某项失败后停止执行整个组合
|
||
```
|
||
|
||
默认建议:
|
||
|
||
```text
|
||
失败后继续执行
|
||
```
|
||
|
||
### 5.3.4 组合校验
|
||
|
||
保存组合前必须校验:
|
||
|
||
1. 是否存在循环引用。
|
||
2. 展开后是否存在重复工具。
|
||
3. 成员引用是否有效。
|
||
4. 成员是否引用已删除工具。
|
||
|
||
如果校验失败,不允许保存,并提示具体原因。
|
||
|
||
提示示例:
|
||
|
||
```text
|
||
无法保存组合“开发环境”,因为它会导致重复工具:
|
||
- VS Code
|
||
- 项目文件夹
|
||
```
|
||
|
||
```text
|
||
无法保存组合“日常工作区”,因为它会导致循环引用:
|
||
日常工作区 -> 文档工作区 -> 日常工作区
|
||
```
|
||
|
||
---
|
||
|
||
## 5.4 设置界面
|
||
|
||
设置界面建议按左侧导航或顶部 Tab 分组。
|
||
|
||
### 5.4.1 常规设置
|
||
|
||
包含:
|
||
|
||
- 启动后是否默认隐藏到托盘。
|
||
- 关闭窗口时隐藏到托盘。
|
||
- 是否显示退出确认。
|
||
- 主界面默认宽高。
|
||
- 底部信息区默认展开 / 折叠。
|
||
|
||
### 5.4.2 启动与托盘
|
||
|
||
包含:
|
||
|
||
- 是否开机自启。
|
||
- 托盘单击行为:显示 / 隐藏主界面。
|
||
- 托盘菜单配置。
|
||
|
||
托盘菜单固定保持极简:
|
||
|
||
```text
|
||
显示 / 隐藏主界面
|
||
全局快捷键:开启 / 关闭
|
||
设置
|
||
退出
|
||
```
|
||
|
||
### 5.4.3 自动运行列表
|
||
|
||
自动运行列表不是独立任务编排器,而是自动汇总所有设置为“工具箱启动时自动运行”的工具和组合。
|
||
|
||
显示字段:
|
||
|
||
```text
|
||
启用
|
||
顺序
|
||
工具名称
|
||
工具类型
|
||
间隔
|
||
操作
|
||
```
|
||
|
||
支持:
|
||
|
||
- 调整顺序。
|
||
- 设置间隔。
|
||
- 临时启用 / 禁用。
|
||
- 从自动运行中移除。
|
||
|
||
注意:
|
||
|
||
- 从自动运行中移除,等价于把该工具的 `autoRunEnabled` 设置为 false。
|
||
- 自动运行列表不提供失败中断功能。
|
||
- 某项失败后继续执行下一项。
|
||
|
||
### 5.4.4 快捷键管理
|
||
|
||
显示所有已设置快捷键的工具和组合。
|
||
|
||
字段:
|
||
|
||
```text
|
||
快捷键
|
||
工具名称
|
||
工具类型
|
||
状态
|
||
操作
|
||
```
|
||
|
||
支持:
|
||
|
||
- 修改快捷键。
|
||
- 清除快捷键。
|
||
- 检测冲突。
|
||
- 全局启用 / 禁用快捷键。
|
||
|
||
快捷键状态包括:
|
||
|
||
```text
|
||
正常
|
||
内部冲突
|
||
系统注册失败
|
||
已禁用
|
||
```
|
||
|
||
### 5.4.5 数据与备份
|
||
|
||
包含:
|
||
|
||
- 打开配置目录。
|
||
- 导出全部配置。
|
||
- 导入配置。
|
||
- 重置配置。
|
||
- 检查路径失效。
|
||
|
||
导入配置后应自动检查路径失效。
|
||
路径失效的工具不删除,只标记。
|
||
|
||
### 5.4.6 外观设置
|
||
|
||
第一版支持:
|
||
|
||
- 主题:跟随系统 / 浅色 / 深色。
|
||
- 卡片大小:小 / 中 / 大。
|
||
- 界面缩放。
|
||
- 是否显示工具说明。
|
||
|
||
### 5.4.7 系统工具恢复
|
||
|
||
提供按钮:
|
||
|
||
```text
|
||
恢复默认系统工具
|
||
```
|
||
|
||
恢复规则:
|
||
|
||
- 不清空用户现有工具。
|
||
- 不覆盖用户自定义工具。
|
||
- 不重复添加已有默认系统工具。
|
||
- 只补回缺失的默认系统工具。
|
||
- 恢复后默认放入“系统工具”分类。
|
||
- 如果“系统工具”分类不存在,则自动重新创建。
|
||
|
||
---
|
||
|
||
## 5.5 图标选择器
|
||
|
||
图标选择器用于:
|
||
|
||
- 工具图标。
|
||
- 组合图标。
|
||
- 分类图标。
|
||
|
||
支持:
|
||
|
||
```text
|
||
自动获取
|
||
从内置图标库选择
|
||
选择本地图片 / ico
|
||
恢复默认图标
|
||
```
|
||
|
||
### 5.5.1 内置图标库分类
|
||
|
||
建议内置图标库分组:
|
||
|
||
1. 系统
|
||
- 设置
|
||
- 终端
|
||
- 任务管理器
|
||
- 控制面板
|
||
- 注册表
|
||
- 磁盘
|
||
- 服务
|
||
|
||
2. 文件
|
||
- 文档
|
||
- 图片
|
||
- 视频
|
||
- 音乐
|
||
- 压缩包
|
||
- 代码
|
||
- 文件夹
|
||
|
||
3. 工作区
|
||
- 工作
|
||
- 学习
|
||
- 剪辑
|
||
- 设计
|
||
- 开发
|
||
- 游戏
|
||
- 资料
|
||
- AI
|
||
|
||
4. 操作
|
||
- 启动
|
||
- 组合
|
||
- 脚本
|
||
- 链接
|
||
- 收藏
|
||
- 常用
|
||
- 临时
|
||
|
||
5. 通用符号
|
||
- 星标
|
||
- 闪电
|
||
- 工具箱
|
||
- 齿轮
|
||
- 火箭
|
||
- 网格
|
||
- 标签
|
||
|
||
### 5.5.2 图标原则
|
||
|
||
- 默认自动获取,避免用户必须手动设置。
|
||
- 内置图标库用于补充,不要变成复杂素材管理器。
|
||
- 不做图标市场。
|
||
- 不做在线下载图标。
|
||
|
||
---
|
||
|
||
## 6. 交互规则
|
||
|
||
## 6.1 主界面鼠标交互
|
||
|
||
### 6.1.1 卡片单击
|
||
|
||
单击卡片只选中,不启动。
|
||
|
||
选中后:
|
||
|
||
- 卡片显示选中状态。
|
||
- 顶部“启动 / 编辑 / 删除”按钮启用。
|
||
- 用户可按 Enter 启动。
|
||
|
||
### 6.1.2 卡片双击
|
||
|
||
双击卡片启动工具或组合。
|
||
|
||
如果是组合,则按组合规则执行。
|
||
|
||
### 6.1.3 卡片右键
|
||
|
||
右键打开菜单。
|
||
|
||
菜单包含:
|
||
|
||
```text
|
||
启动
|
||
编辑
|
||
重命名
|
||
复制
|
||
移动到分类
|
||
加入 / 取消工具箱启动时自动运行
|
||
删除
|
||
```
|
||
|
||
### 6.1.4 拖拽
|
||
|
||
支持:
|
||
|
||
- 当前分类内拖拽排序。
|
||
- 拖到左侧分类上移动分类。
|
||
- 组合编辑界面中拖拽调整成员顺序。
|
||
|
||
---
|
||
|
||
## 6.2 主界面键盘操作
|
||
|
||
第一版支持:
|
||
|
||
| 快捷键 | 行为 |
|
||
|---|---|
|
||
| 方向键 | 在卡片之间移动选中 |
|
||
| Enter | 启动当前选中工具 / 组合 |
|
||
| Delete | 删除当前选中项,需确认 |
|
||
| F2 | 重命名当前选中项 |
|
||
| Ctrl + F | 聚焦搜索框 |
|
||
| Esc | 清空搜索,或取消当前选中 / 关闭搜索焦点 |
|
||
| Ctrl + N | 新建工具 |
|
||
| Ctrl + G | 新建组合 |
|
||
| Ctrl + , | 打开设置 |
|
||
|
||
其中最重要的是:
|
||
|
||
```text
|
||
方向键选择
|
||
Enter 启动
|
||
Ctrl + F 搜索
|
||
```
|
||
|
||
---
|
||
|
||
## 6.3 托盘交互
|
||
|
||
### 6.3.1 单击托盘图标
|
||
|
||
显示 / 隐藏主界面。
|
||
|
||
### 6.3.2 右键托盘图标
|
||
|
||
打开极简菜单:
|
||
|
||
```text
|
||
显示 / 隐藏主界面
|
||
全局快捷键:开启 / 关闭
|
||
设置
|
||
退出
|
||
```
|
||
|
||
### 6.3.3 关闭主窗口
|
||
|
||
关闭主窗口时隐藏到托盘,不退出程序。
|
||
|
||
---
|
||
|
||
## 7. 数据模型设计
|
||
|
||
## 7.1 总体原则
|
||
|
||
所有能显示为卡片的对象都统一抽象为:
|
||
|
||
```text
|
||
Tool
|
||
```
|
||
|
||
也就是说:
|
||
|
||
- 系统工具是 Tool。
|
||
- 本地工具是 Tool。
|
||
- 网址是 Tool。
|
||
- 组合也是 Tool。
|
||
|
||
区别只在于 `type` 和配置字段不同。
|
||
|
||
组合成员不复制工具内容,只保存 Tool ID 引用。
|
||
自动运行列表也不复制工具内容,只保存 Tool ID 引用。
|
||
|
||
---
|
||
|
||
## 7.2 数据文件建议
|
||
|
||
默认配置目录:
|
||
|
||
```text
|
||
%AppData%\ToolboxApp\
|
||
```
|
||
|
||
建议文件结构:
|
||
|
||
```text
|
||
ToolboxApp
|
||
├─ appsettings.json // 软件设置
|
||
├─ categories.json // 分类列表
|
||
├─ tools.json // 工具列表,包含组合
|
||
├─ autorun.json // 自动运行排序、间隔、临时启用状态
|
||
├─ hotkeys.json // 可选,也可并入 tools.json
|
||
├─ icons\ // 用户自定义图标
|
||
├─ backups\ // 导出或自动备份
|
||
└─ logs\ // 可选,第一版可不持久化日志
|
||
```
|
||
|
||
也可以把 `hotkey` 存在 `tools.json` 中。
|
||
第一版推荐将工具核心配置集中在 `tools.json` 中,避免过度拆分。
|
||
|
||
---
|
||
|
||
## 7.3 Category 模型
|
||
|
||
```json
|
||
{
|
||
"id": "cat_system",
|
||
"name": "系统工具",
|
||
"icon": {
|
||
"kind": "BuiltIn",
|
||
"value": "icon.system.settings"
|
||
},
|
||
"sortOrder": 0,
|
||
"isBuiltIn": true,
|
||
"createdAt": "2026-01-01T00:00:00",
|
||
"updatedAt": "2026-01-01T00:00:00"
|
||
}
|
||
```
|
||
|
||
字段说明:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| id | 分类唯一 ID |
|
||
| name | 分类名称 |
|
||
| icon | 分类图标 |
|
||
| sortOrder | 排序 |
|
||
| isBuiltIn | 是否内置分类 |
|
||
| createdAt | 创建时间 |
|
||
| updatedAt | 更新时间 |
|
||
|
||
特殊分类:
|
||
|
||
```text
|
||
cat_system:系统工具
|
||
cat_uncategorized:未分类
|
||
```
|
||
|
||
`cat_uncategorized` 不允许删除。
|
||
|
||
---
|
||
|
||
## 7.4 Tool 模型
|
||
|
||
```json
|
||
{
|
||
"id": "tool_001",
|
||
"type": "Local",
|
||
"name": "示例工具",
|
||
"categoryId": "cat_uncategorized",
|
||
"description": "这是一个示例本地工具",
|
||
"icon": {
|
||
"kind": "Auto",
|
||
"value": null
|
||
},
|
||
"hotkey": {
|
||
"enabled": true,
|
||
"modifiers": ["Ctrl", "Alt"],
|
||
"key": "T"
|
||
},
|
||
"autoRunEnabled": false,
|
||
"sortOrder": 0,
|
||
"isBuiltIn": false,
|
||
"launchConfig": {},
|
||
"combinationConfig": null,
|
||
"state": {
|
||
"isPathMissing": false,
|
||
"lastLaunchAt": null,
|
||
"lastLaunchResult": null
|
||
},
|
||
"metadata": {},
|
||
"createdAt": "2026-01-01T00:00:00",
|
||
"updatedAt": "2026-01-01T00:00:00"
|
||
}
|
||
```
|
||
|
||
字段说明:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| id | 工具唯一 ID |
|
||
| type | 工具类型:System / Local / Url / Combination |
|
||
| name | 工具名称 |
|
||
| categoryId | 所属分类 ID |
|
||
| description | 说明 |
|
||
| icon | 图标引用 |
|
||
| hotkey | 快捷键配置 |
|
||
| autoRunEnabled | 是否加入工具箱启动时自动运行 |
|
||
| sortOrder | 当前分类中的排序 |
|
||
| isBuiltIn | 是否内置工具 |
|
||
| launchConfig | 启动配置 |
|
||
| combinationConfig | 组合配置,仅组合使用 |
|
||
| state | 运行时或检查状态 |
|
||
| metadata | 预留扩展字段 |
|
||
| createdAt | 创建时间 |
|
||
| updatedAt | 更新时间 |
|
||
|
||
---
|
||
|
||
## 7.5 ToolType 枚举
|
||
|
||
```csharp
|
||
public enum ToolType
|
||
{
|
||
System,
|
||
Local,
|
||
Url,
|
||
Combination
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 7.6 IconRef 模型
|
||
|
||
```json
|
||
{
|
||
"kind": "BuiltIn",
|
||
"value": "icon.system.task_manager",
|
||
"color": "#4F7FFF"
|
||
}
|
||
```
|
||
|
||
图标类型:
|
||
|
||
```text
|
||
Auto
|
||
BuiltIn
|
||
Extracted
|
||
LocalFile
|
||
SystemFileType
|
||
```
|
||
|
||
字段说明:
|
||
|
||
| kind | 说明 |
|
||
|---|---|
|
||
| Auto | 自动获取 |
|
||
| BuiltIn | 内置图标库 |
|
||
| Extracted | 从 exe 或 lnk 提取后缓存 |
|
||
| LocalFile | 用户选择的本地图标或图片 |
|
||
| SystemFileType | 系统文件类型图标 |
|
||
|
||
---
|
||
|
||
## 7.7 Hotkey 模型
|
||
|
||
```json
|
||
{
|
||
"enabled": true,
|
||
"modifiers": ["Ctrl", "Alt"],
|
||
"key": "T"
|
||
}
|
||
```
|
||
|
||
规则:
|
||
|
||
- 至少包含一个修饰键。
|
||
- 不允许多个工具使用完全相同的快捷键。
|
||
- 注册失败时不删除配置,只标记状态。
|
||
|
||
---
|
||
|
||
## 7.8 SystemLaunchConfig 模型
|
||
|
||
```json
|
||
{
|
||
"systemId": "system.task_manager",
|
||
"launchTarget": "taskmgr.exe",
|
||
"launchMethod": "ShellExecute",
|
||
"runAsAdmin": false
|
||
}
|
||
```
|
||
|
||
字段说明:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| systemId | 固定系统工具 ID |
|
||
| launchTarget | 启动目标 |
|
||
| launchMethod | 启动方式 |
|
||
| runAsAdmin | 是否管理员运行 |
|
||
|
||
系统工具必须有固定 ID。恢复默认系统工具时根据固定 ID 判断是否缺失。
|
||
|
||
---
|
||
|
||
## 7.9 LocalLaunchConfig 模型
|
||
|
||
```json
|
||
{
|
||
"path": "D:\\Tools\\Example\\Example.exe",
|
||
"arguments": "",
|
||
"workingDirectory": "D:\\Tools\\Example",
|
||
"runAsAdmin": false,
|
||
"subType": "Executable",
|
||
"useShellExecute": true
|
||
}
|
||
```
|
||
|
||
LocalSubType 建议:
|
||
|
||
```text
|
||
Executable
|
||
Shortcut
|
||
Script
|
||
File
|
||
Folder
|
||
StoreAppShortcut
|
||
Unknown
|
||
```
|
||
|
||
注意:用户侧不需要看到这些子类型,只在软件内部用于处理逻辑和显示只读状态。
|
||
|
||
---
|
||
|
||
## 7.10 UrlLaunchConfig 模型
|
||
|
||
```json
|
||
{
|
||
"url": "https://example.com",
|
||
"openWithDefaultBrowser": true
|
||
}
|
||
```
|
||
|
||
第一版不需要指定浏览器。
|
||
|
||
---
|
||
|
||
## 7.11 CombinationConfig 模型
|
||
|
||
```json
|
||
{
|
||
"failurePolicy": "ContinueOnError",
|
||
"members": [
|
||
{
|
||
"toolId": "tool_001",
|
||
"enabled": true,
|
||
"sortOrder": 0,
|
||
"intervalAfterMs": 1000
|
||
},
|
||
{
|
||
"toolId": "tool_002",
|
||
"enabled": true,
|
||
"sortOrder": 1,
|
||
"intervalAfterMs": 3000
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
failurePolicy 可选值:
|
||
|
||
```text
|
||
ContinueOnError
|
||
StopOnError
|
||
```
|
||
|
||
成员字段:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| toolId | 引用的 Tool ID |
|
||
| enabled | 是否启用该成员 |
|
||
| sortOrder | 成员顺序 |
|
||
| intervalAfterMs | 当前成员执行后的等待时间 |
|
||
|
||
---
|
||
|
||
## 7.12 AutoRunItem 模型
|
||
|
||
```json
|
||
{
|
||
"toolId": "tool_001",
|
||
"enabled": true,
|
||
"sortOrder": 0,
|
||
"intervalAfterMs": 1000
|
||
}
|
||
```
|
||
|
||
自动运行列表由所有 `autoRunEnabled = true` 的工具和组合动态汇总而成。
|
||
|
||
`autorun.json` 只保存自动运行列表中的附加配置:
|
||
|
||
- 顺序。
|
||
- 间隔。
|
||
- 临时启用状态。
|
||
|
||
不要在 `autorun.json` 中复制工具名称、路径、图标等内容。
|
||
|
||
---
|
||
|
||
## 7.13 AppSettings 模型
|
||
|
||
```json
|
||
{
|
||
"startWithWindows": false,
|
||
"startHiddenToTray": true,
|
||
"closeToTray": true,
|
||
"hotkeysGlobalEnabled": true,
|
||
"theme": "System",
|
||
"cardSize": "Medium",
|
||
"showToolDescription": true,
|
||
"bottomLogPanelExpanded": true,
|
||
"window": {
|
||
"width": 1100,
|
||
"height": 720,
|
||
"left": null,
|
||
"top": null
|
||
},
|
||
"dataVersion": 1
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 8. 系统工具设计
|
||
|
||
## 8.1 默认系统工具列表建议
|
||
|
||
第一版建议内置:
|
||
|
||
1. 设置
|
||
2. 控制面板
|
||
3. 文件资源管理器
|
||
4. 任务管理器
|
||
5. 命令提示符
|
||
6. PowerShell
|
||
7. Windows Terminal
|
||
8. 运行
|
||
9. 注册表编辑器
|
||
10. 服务
|
||
11. 设备管理器
|
||
12. 磁盘管理
|
||
13. 计算器
|
||
14. 记事本
|
||
15. 画图
|
||
16. 截图工具
|
||
17. Windows 安全中心
|
||
18. 网络连接
|
||
19. 环境变量
|
||
20. 卸载程序 / 应用管理
|
||
21. 事件查看器
|
||
22. 资源监视器
|
||
23. 系统信息
|
||
24. 任务计划程序
|
||
25. 远程桌面连接
|
||
|
||
### 8.1.1 示例默认系统工具定义
|
||
|
||
```json
|
||
{
|
||
"id": "system.task_manager",
|
||
"name": "任务管理器",
|
||
"launchTarget": "taskmgr.exe",
|
||
"launchMethod": "ShellExecute",
|
||
"suggestRunAsAdmin": false,
|
||
"icon": "icon.system.task_manager"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"id": "system.regedit",
|
||
"name": "注册表编辑器",
|
||
"launchTarget": "regedit.exe",
|
||
"launchMethod": "ShellExecute",
|
||
"suggestRunAsAdmin": true,
|
||
"icon": "icon.system.registry"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"id": "system.windows_update",
|
||
"name": "Windows 更新",
|
||
"launchTarget": "ms-settings:windowsupdate",
|
||
"launchMethod": "ShellExecute",
|
||
"suggestRunAsAdmin": false,
|
||
"icon": "icon.system.update"
|
||
}
|
||
```
|
||
|
||
## 8.2 恢复默认系统工具规则
|
||
|
||
恢复默认系统工具时:
|
||
|
||
1. 读取内置系统工具定义。
|
||
2. 检查当前 tools.json 中是否存在相同 `systemId` 的工具。
|
||
3. 已存在则跳过,不重复创建。
|
||
4. 不存在则创建。
|
||
5. 新创建工具放入“系统工具”分类。
|
||
6. 如果“系统工具”分类不存在,则先创建。
|
||
7. 恢复完成后输出日志。
|
||
|
||
日志示例:
|
||
|
||
```text
|
||
[10:00:01] 开始恢复默认系统工具
|
||
[10:00:01] 已存在:任务管理器,跳过
|
||
[10:00:01] 已恢复:注册表编辑器
|
||
[10:00:01] 已恢复:磁盘管理
|
||
[10:00:01] 默认系统工具恢复完成:新增 2 项,跳过 18 项
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 本地工具设计
|
||
|
||
## 9.1 用户侧概念
|
||
|
||
用户不需要区分:
|
||
|
||
- 自定义程序
|
||
- 文件
|
||
- 文件夹
|
||
- 脚本
|
||
- 快捷方式
|
||
|
||
统一称为:
|
||
|
||
```text
|
||
本地工具
|
||
```
|
||
|
||
用户添加时选择一个路径即可。
|
||
|
||
## 9.2 内部识别
|
||
|
||
软件内部根据路径判断子类型:
|
||
|
||
| 目标 | 子类型 | 处理方式 |
|
||
|---|---|---|
|
||
| .exe | Executable | ShellExecute 启动 |
|
||
| .lnk | Shortcut | ShellExecute 打开快捷方式 |
|
||
| .bat / .cmd | Script | ShellExecute 启动 |
|
||
| .ps1 | File 或高级脚本 | 第一版不重点支持 |
|
||
| 普通文件 | File | 默认软件打开 |
|
||
| 文件夹 | Folder | 资源管理器打开 |
|
||
| 未知扩展名 | Unknown | ShellExecute 尝试打开 |
|
||
|
||
## 9.3 ShellExecute 优先
|
||
|
||
第一版原则:
|
||
|
||
```text
|
||
优先交给 Windows Shell 打开
|
||
```
|
||
|
||
好处:
|
||
|
||
- 文件自动用默认软件打开。
|
||
- 文件夹自动用资源管理器打开。
|
||
- 快捷方式自动解析。
|
||
- Store 应用快捷方式也可被打开。
|
||
- 复杂度低。
|
||
|
||
## 9.4 PowerShell 脚本策略
|
||
|
||
`.ps1` 比较特殊,因为 Windows 默认可能不是执行,而是打开编辑器,并且涉及执行策略。
|
||
|
||
第一版建议:
|
||
|
||
- 不把直接执行 `.ps1` 作为核心能力。
|
||
- `.ps1` 可以按普通文件打开。
|
||
- 后续可增加“高级脚本工具”能力。
|
||
|
||
第一版重点支持:
|
||
|
||
```text
|
||
.bat
|
||
.cmd
|
||
.exe
|
||
.lnk
|
||
普通文件
|
||
文件夹
|
||
```
|
||
|
||
## 9.5 Microsoft Store 应用策略
|
||
|
||
第一版建议:
|
||
|
||
```text
|
||
通过 .lnk 快捷方式添加 Microsoft Store 应用
|
||
```
|
||
|
||
用户可以通过:
|
||
|
||
```text
|
||
Win + R -> shell:AppsFolder
|
||
```
|
||
|
||
找到 Store 应用,并创建快捷方式,然后作为本地工具添加。
|
||
|
||
增强版可增加:
|
||
|
||
```text
|
||
StoreApp 子类型
|
||
AUMID / AppUserModelID 启动
|
||
```
|
||
|
||
但第一版不强制实现。
|
||
|
||
---
|
||
|
||
## 10. 网址工具设计
|
||
|
||
网址工具字段:
|
||
|
||
```text
|
||
名称
|
||
图标
|
||
分类
|
||
说明
|
||
网址
|
||
快捷键
|
||
是否自动运行
|
||
```
|
||
|
||
启动方式:
|
||
|
||
```text
|
||
使用默认浏览器打开
|
||
```
|
||
|
||
URL 校验:
|
||
|
||
- 如果没有协议,可自动补全 `https://`,或提示用户确认。
|
||
- 明显非法 URL 不允许保存。
|
||
|
||
第一版不做:
|
||
|
||
- 指定浏览器。
|
||
- 多浏览器配置。
|
||
- favicon 自动下载。
|
||
|
||
---
|
||
|
||
## 11. 组合工具设计
|
||
|
||
## 11.1 组合核心规则
|
||
|
||
组合是一种 Tool。
|
||
|
||
组合的成员只能引用已有 Tool。
|
||
|
||
组合可以包含:
|
||
|
||
- 系统工具
|
||
- 本地工具
|
||
- 网址
|
||
- 其他组合
|
||
|
||
组合不复制成员内容,只保存成员 Tool ID。
|
||
|
||
## 11.2 组合嵌套规则
|
||
|
||
允许组合嵌套组合。
|
||
但必须满足两个约束:
|
||
|
||
1. 不允许循环引用。
|
||
2. 展开后的最终普通工具集合不能重复。
|
||
|
||
这里的“普通工具”指非组合工具:
|
||
|
||
```text
|
||
System
|
||
Local
|
||
Url
|
||
```
|
||
|
||
组合本身是结构节点,不是最终启动目标。
|
||
|
||
## 11.3 循环引用示例
|
||
|
||
禁止:
|
||
|
||
```text
|
||
组合 A 包含 组合 B
|
||
组合 B 包含 组合 C
|
||
组合 C 包含 组合 A
|
||
```
|
||
|
||
## 11.4 重复工具示例
|
||
|
||
禁止:
|
||
|
||
```text
|
||
组合 A
|
||
├─ 工具 1
|
||
├─ 工具 2
|
||
└─ 组合 B
|
||
├─ 工具 2
|
||
└─ 工具 3
|
||
```
|
||
|
||
因为组合 A 展开后,工具 2 出现了两次。
|
||
|
||
## 11.5 组合执行规则
|
||
|
||
执行组合时:
|
||
|
||
1. 校验组合引用是否有效。
|
||
2. 校验是否循环引用。
|
||
3. 校验展开后是否重复工具。
|
||
4. 按成员顺序执行。
|
||
5. 跳过禁用成员。
|
||
6. 每个成员执行后等待其配置的间隔。
|
||
7. 如果成员是组合,递归执行该组合。
|
||
8. 如果成员失败,根据组合的 failurePolicy 决定继续或停止。
|
||
9. 所有过程输出到底部信息区。
|
||
|
||
## 11.6 组合展开算法建议
|
||
|
||
伪代码:
|
||
|
||
```csharp
|
||
FlattenResult FlattenCombination(string combinationId)
|
||
{
|
||
var visitedCombinations = new Stack<string>();
|
||
var finalTools = new List<Tool>();
|
||
var finalToolIds = new HashSet<string>();
|
||
|
||
void Visit(string toolId)
|
||
{
|
||
var tool = toolRepository.Get(toolId);
|
||
|
||
if (tool.Type != ToolType.Combination)
|
||
{
|
||
if (finalToolIds.Contains(tool.Id))
|
||
throw new DuplicateToolException(tool.Id);
|
||
|
||
finalToolIds.Add(tool.Id);
|
||
finalTools.Add(tool);
|
||
return;
|
||
}
|
||
|
||
if (visitedCombinations.Contains(tool.Id))
|
||
throw new CircularReferenceException(visitedCombinations, tool.Id);
|
||
|
||
visitedCombinations.Push(tool.Id);
|
||
|
||
foreach (var member in tool.CombinationConfig.Members.OrderBy(x => x.SortOrder))
|
||
{
|
||
if (!member.Enabled)
|
||
continue;
|
||
|
||
Visit(member.ToolId);
|
||
}
|
||
|
||
visitedCombinations.Pop();
|
||
}
|
||
|
||
Visit(combinationId);
|
||
|
||
return new FlattenResult(finalTools);
|
||
}
|
||
```
|
||
|
||
注意:实际执行时不能只展开成扁平列表,因为还需要尊重嵌套组合自己的失败策略和间隔。
|
||
因此建议保存两种能力:
|
||
|
||
1. 校验时可展平,用于检测重复工具。
|
||
2. 执行时按树结构递归执行,用于保留组合级失败策略。
|
||
|
||
---
|
||
|
||
## 12. 自动运行设计
|
||
|
||
## 12.1 自动运行来源
|
||
|
||
自动运行列表不是用户手动创建的独立任务列表。
|
||
它来自每个工具或组合的设置:
|
||
|
||
```text
|
||
autoRunEnabled = true
|
||
```
|
||
|
||
设置界面只是动态汇总这些项目。
|
||
|
||
## 12.2 自动运行列表配置
|
||
|
||
自动运行列表保存附加执行信息:
|
||
|
||
```text
|
||
toolId
|
||
enabled
|
||
sortOrder
|
||
intervalAfterMs
|
||
```
|
||
|
||
不保存工具名称、路径、图标等数据。
|
||
|
||
## 12.3 自动运行执行规则
|
||
|
||
工具箱启动后:
|
||
|
||
1. 读取所有 `autoRunEnabled = true` 的工具和组合。
|
||
2. 合并 autorun.json 中的排序、间隔、启用状态。
|
||
3. 按 sortOrder 排序。
|
||
4. 逐项执行。
|
||
5. 某项失败后,记录日志,继续下一项。
|
||
6. 如果某项是组合,则由组合自己的失败策略控制其内部执行。
|
||
7. 自动运行完成后输出汇总。
|
||
|
||
自动运行不提供全局失败中断。
|
||
|
||
## 12.4 自动运行示例日志
|
||
|
||
```text
|
||
[09:00:01] 开始执行启动时自动运行
|
||
[09:00:01] ✓ 启动:Everything
|
||
[09:00:02] ✕ 启动失败:某个本地工具,路径不存在
|
||
[09:00:03] 启动组合:剪辑工作区
|
||
[09:00:03] ✓ 打开:素材文件夹
|
||
[09:00:05] ✓ 打开:剪辑软件
|
||
[09:00:05] 完成组合:剪辑工作区
|
||
[09:00:06] 启动时自动运行完成:成功 3 项,失败 1 项
|
||
```
|
||
|
||
---
|
||
|
||
## 13. 快捷键设计
|
||
|
||
## 13.1 全局快捷键原则
|
||
|
||
- 每个工具和组合可设置一个全局快捷键。
|
||
- 快捷键仅在工具箱运行时生效。
|
||
- 关闭全局快捷键总开关后,所有快捷键失效。
|
||
- 再次开启后重新注册所有快捷键。
|
||
- 不删除原快捷键配置。
|
||
|
||
## 13.2 快捷键限制
|
||
|
||
第一版要求:
|
||
|
||
- 必须包含至少一个修饰键。
|
||
- 不支持纯单键快捷键。
|
||
- 不允许两个工具使用完全相同快捷键。
|
||
|
||
合法示例:
|
||
|
||
```text
|
||
Ctrl + Alt + T
|
||
Ctrl + Shift + S
|
||
Alt + Shift + V
|
||
Win + Alt + C
|
||
```
|
||
|
||
不建议允许:
|
||
|
||
```text
|
||
A
|
||
F1
|
||
Enter
|
||
Space
|
||
```
|
||
|
||
## 13.3 快捷键冲突
|
||
|
||
需要处理两类冲突:
|
||
|
||
### 13.3.1 软件内部冲突
|
||
|
||
两个工具不能设置相同快捷键。
|
||
|
||
### 13.3.2 系统注册失败
|
||
|
||
如果快捷键被 Windows 或其他软件占用,注册可能失败。
|
||
此时应:
|
||
|
||
- 不删除配置。
|
||
- 标记状态为注册失败。
|
||
- 在底部信息区输出提示。
|
||
- 在设置界面快捷键管理中显示状态。
|
||
|
||
## 13.4 快捷键触发行为
|
||
|
||
快捷键触发后:
|
||
|
||
```text
|
||
HotkeyService -> ToolLaunchService.Launch(toolId)
|
||
```
|
||
|
||
不能在快捷键模块中直接写启动逻辑。
|
||
|
||
---
|
||
|
||
## 14. 启动执行服务设计
|
||
|
||
## 14.1 核心服务
|
||
|
||
建议核心服务:
|
||
|
||
```text
|
||
ToolLaunchService
|
||
```
|
||
|
||
所有启动入口都调用它。
|
||
|
||
入口包括:
|
||
|
||
- 双击卡片。
|
||
- 点击启动按钮。
|
||
- 按 Enter。
|
||
- 全局快捷键。
|
||
- 组合成员执行。
|
||
- 启动时自动运行。
|
||
|
||
## 14.2 启动前校验
|
||
|
||
普通工具启动前检查:
|
||
|
||
- 工具是否存在。
|
||
- 工具是否被删除。
|
||
- 本地路径是否存在。
|
||
- 网址是否有效。
|
||
- 启动配置是否完整。
|
||
|
||
组合启动前检查:
|
||
|
||
- 成员引用是否存在。
|
||
- 是否循环引用。
|
||
- 展开后是否重复工具。
|
||
|
||
## 14.3 启动结果定义
|
||
|
||
第一版只判断:
|
||
|
||
```text
|
||
是否成功发起启动
|
||
```
|
||
|
||
不判断:
|
||
|
||
- 目标程序是否持续运行。
|
||
- 目标程序是否崩溃。
|
||
- 脚本业务逻辑是否成功。
|
||
- 网页是否加载成功。
|
||
|
||
## 14.4 LaunchResult 模型
|
||
|
||
```csharp
|
||
public class LaunchResult
|
||
{
|
||
public string ToolId { get; set; }
|
||
public string ToolName { get; set; }
|
||
public bool Success { get; set; }
|
||
public string? ErrorMessage { get; set; }
|
||
public LaunchResultKind Kind { get; set; }
|
||
}
|
||
```
|
||
|
||
LaunchResultKind:
|
||
|
||
```text
|
||
Success
|
||
PathMissing
|
||
InvalidUrl
|
||
AccessDenied
|
||
UserCancelledElevation
|
||
ProcessStartFailed
|
||
CircularReference
|
||
DuplicateTool
|
||
UnknownError
|
||
Skipped
|
||
```
|
||
|
||
## 14.5 本地工具启动建议
|
||
|
||
C# 思路:
|
||
|
||
```csharp
|
||
var startInfo = new ProcessStartInfo
|
||
{
|
||
FileName = target,
|
||
Arguments = arguments,
|
||
WorkingDirectory = workingDirectory,
|
||
UseShellExecute = true
|
||
};
|
||
|
||
if (runAsAdmin)
|
||
{
|
||
startInfo.Verb = "runas";
|
||
}
|
||
|
||
Process.Start(startInfo);
|
||
```
|
||
|
||
注意:
|
||
|
||
- 普通文件、文件夹、快捷方式需要 `UseShellExecute = true`。
|
||
- 管理员运行需要 `Verb = "runas"`。
|
||
- 用户取消 UAC 时要捕获异常并输出日志。
|
||
|
||
## 14.6 网址启动建议
|
||
|
||
```csharp
|
||
Process.Start(new ProcessStartInfo
|
||
{
|
||
FileName = url,
|
||
UseShellExecute = true
|
||
});
|
||
```
|
||
|
||
## 14.7 系统工具启动建议
|
||
|
||
系统工具也使用统一启动流程。
|
||
系统工具的 `launchTarget` 可以是:
|
||
|
||
```text
|
||
notepad.exe
|
||
calc.exe
|
||
taskmgr.exe
|
||
control
|
||
regedit.exe
|
||
services.msc
|
||
devmgmt.msc
|
||
diskmgmt.msc
|
||
ms-settings:
|
||
ms-settings:windowsupdate
|
||
ncpa.cpl
|
||
shell:AppsFolder
|
||
```
|
||
|
||
使用 `UseShellExecute = true`。
|
||
|
||
---
|
||
|
||
## 15. 数据存储与导入导出
|
||
|
||
## 15.1 保存策略
|
||
|
||
建议采用:
|
||
|
||
- 启动时读取全部 JSON。
|
||
- 运行时在内存中维护状态。
|
||
- 修改后立即保存或短延迟防抖保存。
|
||
- 保存前写入临时文件,再替换正式文件,避免写坏配置。
|
||
|
||
保存流程:
|
||
|
||
```text
|
||
写入 tools.json.tmp
|
||
写入成功后替换 tools.json
|
||
失败则保留旧文件
|
||
```
|
||
|
||
## 15.2 数据版本
|
||
|
||
配置中应包含:
|
||
|
||
```text
|
||
dataVersion
|
||
```
|
||
|
||
未来升级时可以做迁移。
|
||
|
||
## 15.3 导出配置
|
||
|
||
导出应包含:
|
||
|
||
- appsettings.json
|
||
- categories.json
|
||
- tools.json
|
||
- autorun.json
|
||
- icons 目录
|
||
|
||
建议导出为 zip。
|
||
|
||
## 15.4 导入配置
|
||
|
||
导入流程:
|
||
|
||
1. 用户选择导出的 zip 或配置目录。
|
||
2. 解压或读取配置。
|
||
3. 校验数据版本。
|
||
4. 备份当前配置。
|
||
5. 导入新配置。
|
||
6. 检查路径失效。
|
||
7. 输出导入结果。
|
||
|
||
## 15.5 路径失效检测
|
||
|
||
检测对象:
|
||
|
||
- 本地工具路径。
|
||
- 本地图标路径。
|
||
- 工作目录。
|
||
|
||
路径失效时:
|
||
|
||
- 不删除工具。
|
||
- 卡片显示“路径失效”标记。
|
||
- 双击启动时输出错误。
|
||
- 右键提供“修改路径”。
|
||
|
||
日志示例:
|
||
|
||
```text
|
||
[11:12:00] 路径检查完成:发现 3 个失效工具
|
||
[11:12:00] 路径失效:旧版剪辑工具,D:\OldTools\Editor.exe
|
||
```
|
||
|
||
---
|
||
|
||
## 16. 模块划分
|
||
|
||
第一版建议分为六个核心模块。
|
||
|
||
## 16.1 托盘与窗口模块
|
||
|
||
职责:
|
||
|
||
- 托盘图标。
|
||
- 显示 / 隐藏主窗口。
|
||
- 关闭窗口隐藏到托盘。
|
||
- 托盘菜单。
|
||
- 开机自启。
|
||
|
||
建议服务:
|
||
|
||
```text
|
||
TrayService
|
||
WindowStateService
|
||
StartupService
|
||
```
|
||
|
||
## 16.2 数据存储模块
|
||
|
||
职责:
|
||
|
||
- 配置目录管理。
|
||
- JSON 读取保存。
|
||
- 导入导出。
|
||
- 数据版本迁移。
|
||
- 路径失效检测。
|
||
|
||
建议服务:
|
||
|
||
```text
|
||
ConfigurationService
|
||
ToolRepository
|
||
CategoryRepository
|
||
BackupService
|
||
PathValidationService
|
||
```
|
||
|
||
## 16.3 工具管理模块
|
||
|
||
职责:
|
||
|
||
- 工具增删改查。
|
||
- 分类管理。
|
||
- 图标管理。
|
||
- 系统工具恢复。
|
||
- 搜索过滤。
|
||
- 卡片排序。
|
||
|
||
建议服务:
|
||
|
||
```text
|
||
ToolManager
|
||
CategoryManager
|
||
SystemToolService
|
||
IconService
|
||
SearchService
|
||
```
|
||
|
||
## 16.4 启动执行模块
|
||
|
||
职责:
|
||
|
||
- 启动系统工具。
|
||
- 启动本地工具。
|
||
- 启动网址。
|
||
- 执行组合。
|
||
- 执行自动运行。
|
||
- 失败处理。
|
||
- 输出日志。
|
||
|
||
建议服务:
|
||
|
||
```text
|
||
ToolLaunchService
|
||
CombinationLaunchService
|
||
AutoRunService
|
||
LaunchValidationService
|
||
LogOutputService
|
||
```
|
||
|
||
## 16.5 快捷键模块
|
||
|
||
职责:
|
||
|
||
- 注册全局快捷键。
|
||
- 注销全局快捷键。
|
||
- 检测内部冲突。
|
||
- 处理系统注册失败。
|
||
- 全局启用 / 禁用。
|
||
- 快捷键触发工具启动。
|
||
|
||
建议服务:
|
||
|
||
```text
|
||
HotkeyService
|
||
HotkeyRegistry
|
||
HotkeyConflictDetector
|
||
```
|
||
|
||
## 16.6 UI 模块
|
||
|
||
职责:
|
||
|
||
- 主界面。
|
||
- 工具编辑弹窗。
|
||
- 组合编辑界面。
|
||
- 设置界面。
|
||
- 图标选择器。
|
||
- 底部信息输出区。
|
||
|
||
建议 ViewModel:
|
||
|
||
```text
|
||
MainWindowViewModel
|
||
ToolCardViewModel
|
||
CategoryListViewModel
|
||
ToolEditorViewModel
|
||
CombinationEditorViewModel
|
||
SettingsViewModel
|
||
IconPickerViewModel
|
||
LogPanelViewModel
|
||
```
|
||
|
||
---
|
||
|
||
## 17. 搜索设计
|
||
|
||
搜索框位于主界面顶部。
|
||
|
||
搜索范围:
|
||
|
||
- 工具名称。
|
||
- 工具说明。
|
||
- 分类名称。
|
||
- 本地路径。
|
||
- 网址。
|
||
|
||
搜索行为:
|
||
|
||
- 实时过滤。
|
||
- 搜索结果跨分类显示。
|
||
- 卡片上标注所属分类。
|
||
- 搜索状态下仍可双击启动、右键管理。
|
||
- 清空搜索框后回到当前分类。
|
||
|
||
---
|
||
|
||
## 18. 图标处理设计
|
||
|
||
## 18.1 图标来源优先级
|
||
|
||
建议优先级:
|
||
|
||
1. 用户手动选择的图标。
|
||
2. 内置图标库图标。
|
||
3. 从目标文件自动提取的图标。
|
||
4. 系统文件类型图标。
|
||
5. 默认通用图标。
|
||
|
||
## 18.2 图标缓存
|
||
|
||
从 exe、lnk 提取的图标可以缓存到:
|
||
|
||
```text
|
||
%AppData%\ToolboxApp\icons\cache\
|
||
```
|
||
|
||
用户手动选择的图标可以复制到:
|
||
|
||
```text
|
||
%AppData%\ToolboxApp\icons\custom\
|
||
```
|
||
|
||
避免原文件移动后图标丢失。
|
||
|
||
## 18.3 图标库
|
||
|
||
内置图标库可以使用:
|
||
|
||
- XAML Geometry。
|
||
- SVG 资源。
|
||
- 字体图标。
|
||
- PNG 资源。
|
||
|
||
建议统一封装为 IconRef,不要让 UI 直接依赖某种具体图标实现。
|
||
|
||
---
|
||
|
||
## 19. 错误处理与信息输出
|
||
|
||
## 19.1 错误处理原则
|
||
|
||
- 普通错误不弹窗。
|
||
- 输出到底部信息区。
|
||
- 删除、重置、导入覆盖等破坏性操作需要确认。
|
||
- UAC 由系统处理。
|
||
|
||
## 19.2 常见错误
|
||
|
||
需要处理:
|
||
|
||
- 路径不存在。
|
||
- 工作目录不存在。
|
||
- URL 格式错误。
|
||
- 工具引用不存在。
|
||
- 组合循环引用。
|
||
- 组合重复工具。
|
||
- 快捷键内部冲突。
|
||
- 快捷键系统注册失败。
|
||
- 用户取消管理员权限。
|
||
- 配置文件读取失败。
|
||
- 配置文件写入失败。
|
||
- 导入配置失败。
|
||
- 图标加载失败。
|
||
|
||
## 19.3 日志级别
|
||
|
||
底部信息区日志建议分级:
|
||
|
||
```text
|
||
Info
|
||
Success
|
||
Warning
|
||
Error
|
||
```
|
||
|
||
示例:
|
||
|
||
```text
|
||
[Info] 开始启动工具:任务管理器
|
||
[Success] 启动成功:任务管理器
|
||
[Warning] 路径失效:旧工具
|
||
[Error] 启动失败:用户取消管理员权限
|
||
```
|
||
|
||
---
|
||
|
||
## 20. 开机自启设计
|
||
|
||
第一版可使用注册表 CurrentUser 启动项。
|
||
|
||
建议位置:
|
||
|
||
```text
|
||
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
|
||
```
|
||
|
||
启动项指向当前程序路径。
|
||
|
||
注意:
|
||
|
||
- 只设置当前用户自启。
|
||
- 不需要管理员权限。
|
||
- 设置失败要输出日志。
|
||
- 如果程序路径变化,需更新启动项。
|
||
|
||
---
|
||
|
||
## 21. 安全与边界
|
||
|
||
## 21.1 不做危险自动化平台
|
||
|
||
本软件支持启动脚本文件,但第一版不提供直接输入命令并执行的能力。
|
||
避免软件变成复杂脚本执行器。
|
||
|
||
## 21.2 管理员权限最小化
|
||
|
||
工具箱自身不默认管理员运行。
|
||
只有用户明确设置某个工具管理员运行时,才触发 UAC。
|
||
|
||
## 21.3 导入配置安全提示
|
||
|
||
导入配置可能包含本地脚本和程序路径。
|
||
导入后应提示用户检查自动运行和快捷键。
|
||
|
||
建议导入完成后输出:
|
||
|
||
```text
|
||
配置导入完成。建议检查自动运行列表和快捷键,确认其中没有不需要启动的工具。
|
||
```
|
||
|
||
---
|
||
|
||
## 22. Codex 开发建议
|
||
|
||
## 22.1 开发顺序建议
|
||
|
||
建议按以下顺序开发:
|
||
|
||
### 阶段 1:基础框架
|
||
|
||
1. 创建 WPF 项目。
|
||
2. 建立 MVVM 基础结构。
|
||
3. 建立配置目录。
|
||
4. 实现 JSON 读写。
|
||
5. 实现基础数据模型。
|
||
|
||
### 阶段 2:主界面
|
||
|
||
1. 实现主窗口布局。
|
||
2. 实现分类列表。
|
||
3. 实现卡片网格。
|
||
4. 实现卡片选中。
|
||
5. 实现底部信息输出区。
|
||
|
||
### 阶段 3:工具管理
|
||
|
||
1. 实现添加本地工具。
|
||
2. 实现添加网址工具。
|
||
3. 实现编辑工具。
|
||
4. 实现删除工具。
|
||
5. 实现分类管理。
|
||
6. 实现搜索。
|
||
|
||
### 阶段 4:系统工具
|
||
|
||
1. 内置默认系统工具定义。
|
||
2. 首次启动创建系统工具分类和工具。
|
||
3. 实现恢复默认系统工具。
|
||
|
||
### 阶段 5:启动执行
|
||
|
||
1. 实现 ToolLaunchService。
|
||
2. 实现系统工具启动。
|
||
3. 实现本地工具启动。
|
||
4. 实现网址启动。
|
||
5. 实现日志输出。
|
||
|
||
### 阶段 6:组合
|
||
|
||
1. 实现组合编辑界面。
|
||
2. 实现组合成员引用。
|
||
3. 实现循环引用检测。
|
||
4. 实现重复工具检测。
|
||
5. 实现组合执行。
|
||
6. 实现失败策略。
|
||
|
||
### 阶段 7:自动运行
|
||
|
||
1. 实现 autoRunEnabled。
|
||
2. 实现设置界面自动运行列表。
|
||
3. 实现排序、间隔、启用状态。
|
||
4. 实现工具箱启动后自动执行。
|
||
|
||
### 阶段 8:托盘与自启
|
||
|
||
1. 实现托盘图标。
|
||
2. 实现显示 / 隐藏主界面。
|
||
3. 实现关闭隐藏到托盘。
|
||
4. 实现托盘菜单。
|
||
5. 实现开机自启设置。
|
||
|
||
### 阶段 9:快捷键
|
||
|
||
1. 实现快捷键录入。
|
||
2. 实现内部冲突检测。
|
||
3. 实现系统注册。
|
||
4. 实现全局开关。
|
||
5. 实现托盘菜单快捷键开关。
|
||
6. 实现快捷键触发 ToolLaunchService。
|
||
|
||
### 阶段 10:图标与外观
|
||
|
||
1. 实现自动图标。
|
||
2. 实现内置图标库。
|
||
3. 实现图标选择器。
|
||
4. 实现主题和卡片大小设置。
|
||
|
||
### 阶段 11:导入导出与打磨
|
||
|
||
1. 实现导出配置。
|
||
2. 实现导入配置。
|
||
3. 实现路径失效检查。
|
||
4. 完善错误处理。
|
||
5. 完善键盘操作。
|
||
6. 完成整体测试。
|
||
|
||
---
|
||
|
||
## 23. 验收标准
|
||
|
||
## 23.1 基础验收
|
||
|
||
- 软件能正常启动。
|
||
- 软件能隐藏到托盘。
|
||
- 关闭窗口不会退出。
|
||
- 托盘菜单能显示 / 隐藏主界面。
|
||
- 托盘菜单能退出软件。
|
||
- 可设置开机自启。
|
||
|
||
## 23.2 工具验收
|
||
|
||
- 能添加本地工具。
|
||
- 能添加网址工具。
|
||
- 能启动系统工具。
|
||
- 能启动本地 exe。
|
||
- 能打开文件夹。
|
||
- 能打开普通文件。
|
||
- 能打开网址。
|
||
- 路径失效时不崩溃,并显示提示。
|
||
|
||
## 23.3 分类验收
|
||
|
||
- 能新增分类。
|
||
- 能重命名分类。
|
||
- 能删除分类。
|
||
- 删除分类时工具移动到未分类。
|
||
- 分类只能一级。
|
||
- 工具能移动分类。
|
||
|
||
## 23.4 组合验收
|
||
|
||
- 能创建组合。
|
||
- 能添加工具成员。
|
||
- 能添加组合成员。
|
||
- 能调整顺序。
|
||
- 能设置间隔。
|
||
- 能禁用成员。
|
||
- 能检测循环引用。
|
||
- 能检测重复工具。
|
||
- 能按失败策略继续或停止。
|
||
|
||
## 23.5 自动运行验收
|
||
|
||
- 工具可设置启动时自动运行。
|
||
- 组合可设置启动时自动运行。
|
||
- 设置界面自动汇总自动运行列表。
|
||
- 能调整自动运行顺序。
|
||
- 能设置自动运行间隔。
|
||
- 某项失败后继续执行下一项。
|
||
|
||
## 23.6 快捷键验收
|
||
|
||
- 工具可设置快捷键。
|
||
- 组合可设置快捷键。
|
||
- 快捷键能触发启动。
|
||
- 内部冲突能检测。
|
||
- 系统注册失败能提示。
|
||
- 设置界面可统一管理快捷键。
|
||
- 托盘菜单可开启 / 关闭全局快捷键。
|
||
|
||
## 23.7 数据验收
|
||
|
||
- 配置能保存。
|
||
- 重启后配置仍存在。
|
||
- 能导出配置。
|
||
- 能导入配置。
|
||
- 导入后能检查路径失效。
|
||
- 能恢复默认系统工具。
|
||
|
||
---
|
||
|
||
## 24. 最终产品边界总结
|
||
|
||
本软件第一版应专注于:
|
||
|
||
```text
|
||
工具管理
|
||
工具启动
|
||
组合启动
|
||
托盘常驻
|
||
开机自启
|
||
全局快捷键
|
||
本地配置
|
||
```
|
||
|
||
不要扩展成:
|
||
|
||
```text
|
||
软件管家
|
||
自动化平台
|
||
插件平台
|
||
脚本 IDE
|
||
任务调度器
|
||
进程监控器
|
||
云同步服务
|
||
```
|
||
|
||
最重要的设计基准是:
|
||
|
||
> 用户能用非常低的成本,把自己常用的系统功能、软件、文件夹、文件、网址整理成卡片,并能通过双击、快捷键、组合或启动时自动运行快速打开它们。
|
||
|
||
如果后续开发中出现功能取舍,应优先保证:
|
||
|
||
1. 启动稳定。
|
||
2. 数据安全。
|
||
3. 交互简单。
|
||
4. 不误触。
|
||
5. 不过度复杂。
|
||
|
||
---
|
||
|
||
## 25. 一句话规格
|
||
|
||
这是一款 **WPF / .NET 开发的 Windows 个人工具箱软件**,常驻托盘,支持系统工具、本地工具、网址和组合的卡片化管理,支持一级分类、搜索、全局快捷键、工具箱启动时自动运行、组合嵌套、组合执行顺序和间隔、本地 JSON 配置、导入导出、图标自动获取与轻量图标库;其第一版目标是轻量稳定地完成个人工具集中启动,而不是成为复杂自动化平台。
|
||
|