Skip to content

修复部分应用无法输入的问题#1120

Draft
seaurching wants to merge 1 commit intorime:masterfrom
seaurching:fix-securecrt
Draft

修复部分应用无法输入的问题#1120
seaurching wants to merge 1 commit intorime:masterfrom
seaurching:fix-securecrt

Conversation

@seaurching
Copy link
Copy Markdown

通过联调发现框架在VanDyke的SecureCRT下无法正常输入,其应用日志是:

2026-04-17 12:05:00.320861+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa 'k' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(MetaModifier)
2026-04-17 12:05:00.320937+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa 'k' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(ShiftModifier|MetaModifier)
2026-04-17 12:05:00.321014+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa '\xb' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(ControlModifier|MetaModifier)
2026-04-17 12:05:00.321087+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa '\xb' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(ShiftModifier|ControlModifier|MetaModifier)
2026-04-17 12:05:00.321163+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa '\u02da' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(AltModifier|MetaModifier)
2026-04-17 12:05:00.321241+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa '\uf8ff' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(ShiftModifier|AltModifier|MetaModifier)
2026-04-17 12:05:00.321316+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa '\xb' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(ControlModifier|AltModifier|MetaModifier)
2026-04-17 12:05:00.321391+0800 0xb882     Default     0x0                  5394   0    SecureCRT: (QtCore) [com.vandyke.SecureCRT:qt.qpa.keymapper] Mismatch between Cocoa '\xb' and Carbon '\x0' for virtual key 40 with QFlags<Qt::KeyboardModifier>(ShiftModifier|ControlModifier|AltModifier|MetaModifier)

根据以上内容获取得出结论:
SecureCRT 使用的 Qt 框架没有正确将 keyDown 事件传递给 macOS InputMethodKit,导致输入法无法接收键盘事件。
因此解决方案: 使用 CGEventTap 监听全局键盘事件,绕过 Qt 的问题。
因为macOS 输入法架构是被动的:

  • 输入法依赖应用程序主动将键盘事件传递给它
  • SecureCRT/Qt 没有正确传递事件,输入法本身无法"抢"到事件
  • CGEventTap 是唯一能拦截全局键盘事件的方法,而这需要辅助功能权限

所以基于上述问题给出修复内容:

1、添加辅助权限,安装后可以弹出对话框开启
2、兼容SecureCRT中英文状态下正常输入
3、自动检测安装目录,可以放到/Library/Input Mehots也可以放到$HOME/Library/Input Methods

2、兼容SecureCRT中英文状态下正常输入
3、自动检测安装目录,可以放到/Library/Input Mehots也可以放到$HOME/Library/Input Methods
@seaurching
Copy link
Copy Markdown
Author

目前在蘋果筆記本上必須要按住ctrl+backspace才能向前刪除不,向後刪除還沒有修復

@lotem
Copy link
Copy Markdown
Member

lotem commented Apr 20, 2026

這一改動超出了系統設計的輸入法框架。
輸入法軟件基於這個框架開發,不能因爲應用程序不遵守系統的約定就另起爐竈。
輔助功能權限不是給輸入法用的。
應當由應用程序適配系統的輸入法接口。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants