-
-
Notifications
You must be signed in to change notification settings - Fork 794
Open
Labels
Description
Description
问题描述
在使用“划词翻译”快捷键 (Ctrl+2) 时,如果 Automation 方式获取文本失败,软件会降级(fallback)使用剪贴板方式。此时,我的系统弹出了 Caps Lock(大写锁定)的 OSD 提示。
经过排查,原因是应用在模拟按键前,通过 enigo 库强制发送了一个“释放 Caps Lock”的事件,即使当前并没有开启大写锁定,这会导致带有 OSD 驱动的品牌机(如 Alienware/Dell)触发状态提示。
复现步骤
- 在 Windows 系统上(特别是安装了 Alienware/Dell 等 OSD 驱动的设备),确保 Caps Lock 处于关闭状态。
- 在一个不支持
get_text_by_automation接口的应用程序中选中一段文本(触发 fallback 机制)。 - 按下快捷键
Ctrl+2(划词翻译)。 - 观察到屏幕上出现了“大写锁定已关闭”的系统提示弹窗。
预期行为
翻译面板应该正常打开,且不触发任何系统按键状态切换的提示(如 Caps Lock)。
日志与分析
根据日志分析,该问题发生在降级机制(fallback to get_text_by_clipboard)执行期间。为了模拟复制操作,enigo 库尝试释放所有功能键,其中包含 CapsLock,这一操作触发了系统的 OSD 提示。
相关日志:
[2025-12-17][17:33:09][INFO][selection::windows] get_text_by_automation is empty
[2025-12-17][17:33:09][INFO][selection::windows] fallback to get_text_by_clipboard
...
[2025-12-17][17:33:09][DEBUG][enigo::platform::win_impl] key(key: CapsLock, direction: Release) <-- 触发了弹窗
...
[2025-12-17][17:33:09][DEBUG][enigo::platform::win_impl] key(key: Control, direction: Press)
[2025-12-17][17:33:09][DEBUG][enigo::platform::win_impl] key(key: C, direction: Click)
### Reproduction
在 Windows 系统上(特别是安装了 Alienware/Dell 等 OSD 驱动的设备),确保 Caps Lock 处于关闭状态。
在一个不支持 get_text_by_automation 接口的应用程序中选中一段文本(触发 fallback 机制)。
按下快捷键 Ctrl+2(划词翻译)。
观察到屏幕上出现了“大写锁定已关闭”的系统提示弹窗。
<img width="661" height="370" alt="Image" src="https://github.com/user-attachments/assets/faf0b9af-3b81-4ead-9677-3581b6ac1279" />
### Platform
Windows
### System Version
Windows 11 家庭中文版 25H2 26200.7462
### Window System (Linux Only)
None
### Software Version
3.0.7
### Log File
[2025-12-17][17:33:09][INFO][selection::windows] get_text_by_automation is empty
[2025-12-17][17:33:09][INFO][selection::windows] fallback to get_text_by_clipboard
...
[2025-12-17][17:33:09][DEBUG][enigo::platform::win_impl] key(key: CapsLock, direction: Release) <-- 触发了弹窗
...
[2025-12-17][17:33:09][DEBUG][enigo::platform::win_impl] key(key: Control, direction: Press)
[2025-12-17][17:33:09][DEBUG][enigo::platform::win_impl] key(key: C, direction: Click)
### Additional Information
_No response_