我有一个应用程序在库中使用键盘钩子程序。 在一个消息的钩子wParam是255,我们认为是“(保留/ OEMClear)”。 我想找出这个消息的来源,因为它会导致我的应用程序在图书馆崩溃,并且鉴于它不应该发生,这将是很好的识别它。 信息只能在一台PC上重复出现 – 其他电脑根本看不到信息。
那么,有没有办法跟踪发送到窗口的消息的来源,或者系统上的所有消息?
没有内置的方法来找出谁发送窗口消息,甚至没有win32k跟踪这个; 你可能可以通过内核调试器和条件断点找到它。
但是,我认为你并不需要这些信息。 你需要让你的应用程序正确处理发送给它的任何消息。
(我最初建议使用Spy ++或winspector,但是它们并没有挂钩发送消息,这甚至没有意义!一个窗口接收消息,但是他们不发送消息,一个线程这样做,我会离开我的关于使用调试器的建议。)
有时调试可以帮助。 尝试下载Windows PDB文件,并设置一个断点,只有当这些消息之一发生命中。 在这一点上看看调用堆栈通常可以揭示事情发生的原因。 发布的消息和从其他进程发送的消息将打破这种做法。
没有内置的方法来找出谁发送窗口消息
当然有。 但它是先进的Win32编程(通过连接CSRSS)
林不知道这是否你想要它,但看看sysinternals过程监视器。
http:// technet.microsoft.com/en-us/sysinternals/bb896645.aspx
它显示了一个进程发生的一切,所以我假设它也捕获消息。 该网站在写的时候,所以我无法检查。