我有一个使用库中的键盘钩子程序的应用程序。一条消息的钩子中的wParam是255,我们认为是“(reserved / OEMClear)”。我想弄清楚这条消息的来源,因为它会导致我的应用程序在库中崩溃,并且鉴于它不应该发生,识别它会很好。该消息仅在我们拥有的一台PC上反复出现 - 其他计算机根本看不到该消息。
那么,有没有办法跟踪发送到窗口的消息来源,或系统上的所有人?
答案 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
它显示了进程中发生的所有事情,因此我认为它也会捕获消息。在撰写本文时,该网站已关闭,因此我无法检查。