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():按住键增量翻译。IsReservedGlobalHotkey():阻止把系统复制热键注册为全局热键。STranslate/Helpers/CtrlSameCHelper.cs
STranslate/Helpers/MouseKeyHelper.cs
STranslate/Helpers/ClipboardMonitor.cs
AddClipboardFormatListener 监听剪贴板变更。STranslate/Core/Settings.cs
SelectedTextFetchTimeoutMs、TextSeparatorHandleType、TextSeparatorHandleScopes、CrosswordFetchFailedFallbackTarget。STranslate/Views/MainWindow.xaml
Window.InputBindings:软件内热键(设置、历史、置顶、自动翻译等)。IsInputActuallyHidden / IsInputBoxVisible / IsLanguageSelectControlVisible,避免输入翻译入口被持久隐藏设置阻断。HotkeySettings.RegisterHotkeys() 对每个全局热键调用 HandleGlobalLogic(propertyName)。HandleGlobalLogic() 通过 HotkeyMapper.SetHotkey() 注册系统热键并绑定命令回调。WithFullscreenCheck():
DisableGlobalHotkeys == true 时禁用。IgnoreHotkeysOnFullscreen == true 且前台全屏时跳过。MainWindowViewModel(例如截图翻译、图片翻译、静默 OCR、替换翻译、剪贴板监听切换)。translate_input、托盘双击输入翻译、划词失败回退到输入翻译都会进入 MainWindowViewModel.InputClear()。InputClear() 取消当前任务、重置识别状态、清空输入、重置服务结果,并进入临时输入翻译模式。Settings.HideInput,主窗口也会显示输入框并聚焦,方便立即键入。Settings.HideInput;关闭/取消窗口、直接文本翻译、用户手动显示/隐藏输入框后退出该模式。Settings.HideInputWithLangSelectControl 仍作为普通显示偏好生效;输入翻译临时显示输入框时,语言选择控件也会同步显示。IncrementalTranslateKey 变化触发 ApplyIncrementalTranslate()。HotkeyMapper.RegisterHoldKey(key, OnIncKeyPressed, OnIncKeyReleased) 并开启低级键盘钩子。OnIncKeyPressed():置顶窗口 + 开启鼠标划词监听 + 缓存旧文本。OnIncKeyReleased():关闭划词监听,若文本有变化则执行翻译。CtrlSameCHelper 监听全局按键,500ms 内双击 Ctrl+C 触发 CrosswordTranslateByCtrlSameCHandler()。MouseKeyHelper 在拖拽完成后读选中文本,触发 ExecuteTranslate()。ClipboardMonitor 收到 WM_CLIPBOARDUPDATE 后读取文本,触发 OnClipboardTextChanged -> ExecuteTranslate()。ClipboardHelper.GetSelectedTextAsync(Settings.SelectedTextFetchTimeoutMs)。SelectedTextFetchTimeoutMs 在 Settings 中限制为 50~5000 毫秒;鼠标划词监听通过委托实时读取当前配置。MainWindowViewModel.HandleCapturedText(text, scope):
LineBreakHandleType 换行处理。TextSeparatorHandleType 与 TextSeparatorHandleScopes 对 _ / - 做可选分隔符处理。MouseHook:监听鼠标划词。Crossword:划词翻译与 Ctrl+C+C。Incremental:按住键增量翻译。ClipboardMonitor:剪贴板监听翻译。ScreenshotTranslate:截图翻译 OCR 结果。SilentOcr:静默 OCR 写入剪贴板结果。CrosswordFetchFailedFallbackTarget 分支:
InputTranslate:清空输入并显示主窗口,回退到输入翻译;输入框会临时显示,不改写隐藏输入框设置。ShowWindow:仅显示主窗口,保留当前输入和结果。Helper.PromptConfigureService,弹窗显示收敛到 AppMessageBox,活动窗口优先、透明 owner 兜底。Show() 主窗口再弹 Snackbar,确保用户可见。InputBindings 绑定 HotkeySettings.*Hotkey.Key。Ctrl + C 是系统复制和划词取词保留热键。HotkeyMapper.TryGetReservedGlobalHotkeyMessageKey() 给出提示并禁用保存。HotkeyMapper.SetHotkey() 二次拦截,避免配置文件手工写入导致误注册。HotkeySettings.UpdateTrayIconWithPriority() 优先级:
DisableGlobalHotkeys -> NoHotkey 图标IgnoreHotkeysOnFullscreen -> IgnoreOnFullScreen 图标HotkeySettings.RegisteredHotkeys:统一热键定义清单与适用窗口类型。HotkeyType:Global/MainWindow/SettingsWindow/OcrWindow/ImageTransWindow。GlobalHotkey.IsConflict:注册冲突状态。DisableGlobalHotkeysIgnoreHotkeysOnFullscreenCrosswordTranslateByCtrlSameCIncrementalTranslateKeySelectedTextFetchTimeoutMsTextSeparatorHandleTypeTextSeparatorHandleScopesCrosswordFetchFailedFallbackTargetHideInput、HideInputWithLangSelectControlIsInputActuallyHidden:持久隐藏设置叠加输入翻译临时显示后的实际隐藏状态。IsInputBoxVisible:主输入框实际可见状态。IsLanguageSelectControlVisible:语言选择控件实际可见状态。STranslate/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()。SelectedTextFetchTimeoutMs 并明确 TextSeparatorHandleScope,避免新增入口与现有入口处理不一致。InputClear(),确保隐藏输入框时仍会临时显示输入区并正确聚焦。