Phase 4: 全局快捷键拦截 (Win32 API)
- 新增 HotKeyManager (Helpers/), 使用 user32.dll RegisterHotKey/UnregisterHotKey 注册系统级快捷键 - 支持 Ctrl/Alt/Shift/Win 修饰键组合, 单字符键和命名键(F1-F12等)解析 - MainWindow.OnSourceInitialized 挂载 HwndSource.AddHook 拦截 WM_HOTKEY 消息 - 启动时自动注册所有含快捷键的工具, 工具增删改后自动重新注册 - 快捷键冲突时记录 Win32 错误码, 无效格式打印警告 - 新增 12 个 HotKeyManager 单元测试 (73 tests total)
This commit is contained in:
@@ -20,6 +20,7 @@ public partial class MainViewModel : ObservableObject
|
||||
private readonly IDataService _dataService;
|
||||
private readonly IProcessExecutionService _processService;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly HotKeyManager _hotKeyManager;
|
||||
|
||||
/// <summary>
|
||||
/// 全部分类的虚拟对象
|
||||
@@ -30,12 +31,14 @@ public partial class MainViewModel : ObservableObject
|
||||
ILogService logService,
|
||||
IDataService dataService,
|
||||
IProcessExecutionService processService,
|
||||
IServiceProvider serviceProvider)
|
||||
IServiceProvider serviceProvider,
|
||||
HotKeyManager hotKeyManager)
|
||||
{
|
||||
_logService = logService;
|
||||
_dataService = dataService;
|
||||
_processService = processService;
|
||||
_serviceProvider = serviceProvider;
|
||||
_hotKeyManager = hotKeyManager;
|
||||
|
||||
LoadData();
|
||||
}
|
||||
@@ -201,9 +204,20 @@ public partial class MainViewModel : ObservableObject
|
||||
// 恢复之前选中的分类(若仍存在),否则选中"全部"
|
||||
SelectedCategory = Categories.FirstOrDefault(c => c.Id == previousCategoryId) ?? AllCategory;
|
||||
ApplyFilter();
|
||||
|
||||
// 工具列表变更后重新注册快捷键
|
||||
RegisterAllHotKeys();
|
||||
}
|
||||
|
||||
// ───────────────────────────── 初始化 ─────────────────────────────
|
||||
// ───────────────────────────── 快捷键 ─────────────────────────────
|
||||
|
||||
/// <summary>
|
||||
/// 注册所有工具的全局快捷键(由 MainWindow.OnSourceInitialized 及数据变更后调用)
|
||||
/// </summary>
|
||||
public void RegisterAllHotKeys()
|
||||
{
|
||||
_hotKeyManager.RegisterAll(Tools);
|
||||
}
|
||||
|
||||
private void LoadData()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user