2

我正在寻找一种方法来拦截外部进程中对WM_CHAR的GetMessage()调用(具体来说,只有活动窗口)。我对使用SetWindowsHookEx()犹豫不决- 我想绝对确保可能修改键盘输入的最广泛的程序有机会首先触发。有没有人有什么建议?

语境:我正在构建一个应用程序,旨在生成当前键盘布局的视觉效果。但是,我希望使其尽可能与第三方键盘重新映射软件(包括用户制作的 AutoHotkey 脚本等)兼容。当通过热键触发时,我的程序将按键发送到活动窗口(扫描码 + 适当的虚拟键),它应该由其窗口过程处理......从而触发任何基于系统范围挂钩的重映射软件和具有被编程为仅重新映射活动应用程序中的键......然后我的程序将拦截生成的 WM_CHAR / WM_UNICHAR / WM_DEADCHAR 消息,从中重建键盘布局。实际上,字符消息不应该到达输出的活动窗口。

PS抱歉,这可能是一种糟糕的礼仪——注册后首先发布一个问题——但我已经研究这个问题很多个晚上了,但我仍然没有找到最佳解决方案!我主要从 AutoHotkey 工作,我完全愿意分享我考虑过的其他方法来获得真正的当前键盘布局,但它们都有其局限性:与重新映射软件玩得很好。

4

1 回答 1

0

将“~”(不带引号)放在热键之前。

这将运行您为热键设置的任何代码,允许击键失败。

例子:

~^a::
MsgBox, 你按下了 Ctrl+a
返回
于 2013-12-20T03:35:37.503 回答