GetMessage(WM_CHAR)覆盖?确保所有其他窗口挂钩都激活

时间:2013-01-02 19:20:57

标签: hook code-injection autohotkey keyboard-layout getmessage

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

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

PS 对不起,这可能是一种可怕的礼节 - 在注册后首先发布一个问题 - 但我现在已经研究了这个问题很多个晚上了,我仍然没有找到最佳选择解!我主要是从AutoHotkey工作,我完全愿意分享我为获得真正的当前键盘布局而考虑的其他方法,但它们都有其局限性:与重映射软件配合使用。

1 个答案:

答案 0 :(得分:0)

在热键之前加上'〜'(不带引号)。

这将运行你拥有的任何代码热键允许按键击中。

示例:

~^a::
MsgBox, You pressed Ctrl+a
return