Skip to content

feat: 社区输入法增加全局快捷键唤起输入窗口与回车自动发送 #322

Description

@XKEYC-BOT

背景

群友实现了一个外置 SC 中文输入辅助工具:

实现思路不是注入游戏,也不是游戏内 Overlay,而是:

  1. 通过系统级快捷键唤起一个置顶输入窗口;
  2. 用户在该窗口里使用系统输入法输入中文;
  3. 回车后将中文转换为 SC 汉化输入码,例如 [zh] @xxx@xxx
  4. 自动最小化/隐藏输入窗口;
  5. 切回游戏窗口;
  6. 通过键盘扫描码模拟输入并回车发送。

这个方案可以显著减少玩家在游戏中发送中文时反复切窗口/复制粘贴的操作。

需求建议

在汉化盒子的「社区输入法」功能开启后,增加类似能力:

  • 注册一个系统级组合快捷键,用于拉起输入窗口;
  • 输入窗口支持系统输入法正常组词;
  • 用户按 Enter 后:
    • 如果仍处于输入法组词状态,不触发发送;
    • 如果已完成输入,则转换为社区输入法编码;
    • 隐藏/最小化输入窗口;
    • 自动切回之前的游戏窗口;
    • 自动输入转换后的文本;
    • 自动回车发送。

参考实现要点

参考项目核心机制:

  • Windows 低级键盘钩子:WH_KEYBOARD_LL
    • RegisterHotKey 更容易在全屏游戏/Raw Input 场景下收到热键;
    • 需要注意安全性和误触处理。
  • 原生输入窗口:Win32 EDIT 控件
    • 直接复用系统输入法;
    • 不需要自己实现拼音/候选逻辑。
  • 输入法组词状态判断:
    • ImmGetCompositionStringW(..., GCS_COMPSTR, ...)
    • 避免候选词确认时误触发送。
  • 切回游戏窗口:
    • 记录唤起前的前台窗口;
    • 使用 AttachThreadInput + SetForegroundWindow 提高切回成功率。
  • 自动输入:
    • 参考项目使用 keybd_event + KEYEVENTF_SCANCODE 模拟硬件扫描码逐字输入;
    • 对 Raw Input 游戏兼容性可能优于剪贴板粘贴。

风险点

需要重点评估:

  1. 反作弊/安全风险

    • 方案不注入游戏进程,但全局键盘钩子和模拟输入仍可能被安全软件或反作弊关注;
    • 建议作为可选功能,由用户主动开启,并在 UI 中提示风险。
  2. 快捷键冲突

    • 不建议写死 F8;
    • 建议允许用户配置组合键,例如 Ctrl + Alt + Space / Ctrl + Shift + Enter 等。
  3. 输入速度与丢字

    • 扫描码逐字输入需要间隔;
    • 需要提供可调整的输入间隔,或者至少设定一个保守默认值。
  4. 窗口定位

    • 不应写死位置;
    • 可以提供自动定位/记忆上次位置/跟随屏幕分辨率。
  5. 字符兼容

    • 遇到词表外字符、emoji、特殊标点时,需要有明确处理策略;
    • 不建议静默丢弃,最好给出提示或替换。

期望效果

用户操作流程变成:

游戏中按快捷键
→ 弹出输入窗口
→ 输入中文
→ Enter
→ 自动发送到 SC 聊天框

尽量保持不注入、不改游戏文件、不依赖剪贴板。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions