我的应用程序如何找到Windows消息的发件人?

时间:2009-05-26 14:29:34

标签: windows message keyboard-hook

我有一个使用库中的键盘钩子程序的应用程序。一条消息的钩子中的wParam是255,我们认为是“(reserved / OEMClear)”。我想弄清楚这条消息的来源,因为它会导致我的应用程序在库中崩溃,并且鉴于它不应该发生,识别它会很好。该消息仅在我们拥有的一台PC上反复出现 - 其他计算机根本看不到该消息。

那么,有没有办法跟踪发送到窗口的消息来源,或系统上的所有人?

4 个答案:

答案 0 :(得分:6)

没有内置方法可以找出发送窗口消息的人,甚至win32k都没有跟踪这个消息;您可以使用内核调试器和条件断点找到它。

但是,我认为你并不真的需要这些信息;您需要让您的应用正确处理发送给它的任何消息。

答案 1 :(得分:1)

(我最初建议使用Spy ++或winspector,但他们没有挂钩发送消息。这甚至没有意义!一个窗口接收消息,但他们不发送消息,一个线程就是这样。我会留下关于使用调试器的建议。)

有时调试可以提供帮助。尝试下载Windows PDB文件并设置仅在发生其中一条消息时才会命中的断点。在这一点上查看调用堆栈通常可以解释事情发生的原因。从其他进程发送的已发布消息和消息将阻止这种方法。

答案 2 :(得分:0)

没有内置方法可以找出发送窗口消息的人

当然有。 但它是先进的Win32编程(通过挂钩CSRSS)

答案 3 :(得分:-1)

我不确定这是否符合您的要求,但请查看sysinternals的Process Monitor。

http:// technet.microsoft.com/en-us/sysinternals/bb896645.aspx

它显示了进程中发生的所有事情,因此我认为它也会捕获消息。在撰写本文时,该网站已关闭,因此我无法检查。