Skip to content

[BUG]: title [Windows] 划词翻译时触发 Caps Lock 提示(由 enigo 按键释放导致) #1223

@Liaming

Description

@Liaming

Description

问题描述

在使用“划词翻译”快捷键 (Ctrl+2) 时,如果 Automation 方式获取文本失败,软件会降级(fallback)使用剪贴板方式。此时,我的系统弹出了 Caps Lock(大写锁定)的 OSD 提示。

经过排查,原因是应用在模拟按键前,通过 enigo 库强制发送了一个“释放 Caps Lock”的事件,即使当前并没有开启大写锁定,这会导致带有 OSD 驱动的品牌机(如 Alienware/Dell)触发状态提示。

复现步骤

  1. 在 Windows 系统上(特别是安装了 Alienware/Dell 等 OSD 驱动的设备),确保 Caps Lock 处于关闭状态。
  2. 在一个不支持 get_text_by_automation 接口的应用程序中选中一段文本(触发 fallback 机制)。
  3. 按下快捷键 Ctrl+2(划词翻译)。
  4. 观察到屏幕上出现了“大写锁定已关闭”的系统提示弹窗。

预期行为

翻译面板应该正常打开,且不触发任何系统按键状态切换的提示(如 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_

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions