为什么PeekMessage不会在PostMessage发布的消息上调用键盘钩子proc?

时间:2014-03-18 13:16:03

标签: c++ windows hook

我有一个通过键盘钩子处理键盘输入的应用程序。它通过SetWindowsHookExWH_KEYBOARD,...)设置挂钩。

当消息处理循环中的PeekMessage从真实硬件键盘接收到通常的WM_KEYUPWM_KEYDOWN消息时,它会调用回调并且一切正常,但它完全忽略{{1}发送的消息(以及任何其他消息传递功能)。它只是没有调用钩子程序!

下面有一段可怕的代码(主要是由Visual Studio自动生成)来说明这种行为。有一个带有消息处理循环和线程的窗口,每1秒发送一次PostThreadMessage个消息。键盘回调的所有调用都将日志记录写入控制台窗口,当我按下键盘上的键时,我可以看到它们,但是没有第二个线程发送的消息记录!

我无法更改主应用程序实现。由于许多原因,它应该通过键盘钩子工作。但是,当处理来自硬件键盘的消息时,如何让WM_KEYDOWNGetMessage处理我的键盘消息?非常感谢任何帮助,我花了整整一周时间来解决这个问题!

我已经在Windows 8.1 64位上使用32位应用程序对其进行了测试。

以下是代码:

PeekMessage

0 个答案:

没有答案