src/docs/flow-input-trigger.md
MainWindowViewModel 命令。STranslate/Core/HotkeySettings.cs
LazyInitialize():启动时应用 Ctrl+CC、增量翻译键、全局热键注册。HandleGlobalLogic():热键到命令的映射中心。STranslate/Helpers/HotkeyMapper.cs
SetHotkey():NHotkey/ChefKeys 注册。StartGlobalKeyboardMonitoring():低级键盘钩子(WH_KEYBOARD_LL)。RegisterHoldKey():按住键增量翻译。STranslate/Helpers/CtrlSameCHelper.cs
STranslate/Helpers/MouseKeyHelper.cs
STranslate/Helpers/ClipboardMonitor.cs
AddClipboardFormatListener 监听剪贴板变更。STranslate/Views/MainWindow.xaml
Window.InputBindings:软件内热键(设置、历史、置顶、自动翻译等)。HotkeySettings.RegisterHotkeys() 对每个全局热键调用 HandleGlobalLogic(propertyName)。HandleGlobalLogic() 通过 HotkeyMapper.SetHotkey() 注册系统热键并绑定命令回调。WithFullscreenCheck():
DisableGlobalHotkeys == true 时禁用。IgnoreHotkeysOnFullscreen == true 且前台全屏时跳过。MainWindowViewModel(例如截图翻译、图片翻译、静默 OCR、替换翻译、剪贴板监听切换)。IncrementalTranslateKey 变化触发 ApplyIncrementalTranslate()。HotkeyMapper.RegisterHoldKey(key, OnIncKeyPressed, OnIncKeyReleased) 并开启低级键盘钩子。OnIncKeyPressed():置顶窗口 + 开启鼠标划词监听 + 缓存旧文本。OnIncKeyReleased():关闭划词监听,若文本有变化则执行翻译。CtrlSameCHelper 监听全局按键,500ms 内双击 Ctrl+C 触发 CrosswordTranslateByCtrlSameCHandler()。MouseKeyHelper 在拖拽完成后读选中文本,触发 ExecuteTranslate()。ClipboardMonitor 收到 WM_CLIPBOARDUPDATE 后读取文本,触发 OnClipboardTextChanged -> ExecuteTranslate()。InputBindings 绑定 HotkeySettings.*Hotkey.Key。HotkeySettings.UpdateTrayIconWithPriority() 优先级:
DisableGlobalHotkeys -> NoHotkey 图标IgnoreHotkeysOnFullscreen -> IgnoreOnFullScreen 图标HotkeySettings.RegisteredHotkeys:统一热键定义清单与适用窗口类型。HotkeyType:Global/MainWindow/SettingsWindow/OcrWindow/ImageTransWindow。GlobalHotkey.IsConflict:注册冲突状态。DisableGlobalHotkeysIgnoreHotkeysOnFullscreenCrosswordTranslateByCtrlSameCIncrementalTranslateKeySTranslate/Core/HotkeySettings.csSTranslate/Helpers/HotkeyMapper.csSTranslate/Helpers/CtrlSameCHelper.csSTranslate/Helpers/MouseKeyHelper.csSTranslate/Helpers/ClipboardMonitor.csSTranslate/ViewModels/MainWindowViewModel.csSTranslate/Views/MainWindow.xamlHotkeySettings 增加字段、RegisteredHotkeys 声明、HandleGlobalLogic 映射。InputBindings 绑定 HotkeySettings 键值。GlobalHotkey.IsConflict 与 HotkeyMapper.SetHotkey 异常日志。HotkeyMapper.ShouldSkipHotkey() 与 HotkeySettings.WithFullscreenCheck()。