是否可以在进程之间跟踪PostMessage?

时间:2013-03-29 09:49:13

标签: windows winapi visual-c++ visual-studio-2012 trace

我们有一个系统,通常在同一系统上运行两个进程。一个进程处理GUI,另一个进程像服务一样运行(虽然由于历史原因,它不是服务,只是一个没有可见窗口的exe)。

这两个进程主要通过异步注册消息进行IPC - 即我们在两个进程中使用RegisterWindowMessage()来定义一组有效形成服务器进程API的大量消息。

我编写了一个“免提”监控应用程序,它使用SetWindowsHookEx()来监控和显示两个进程的消息队列,并提供对API使用方式和通知方式的某种程度的解码传播到GUI进程(每个单独的窗口可以直接从服务器订阅通知)。

因此,两个方向都有大量的消息,所以我有过滤和摘要计数等,所以我可以专注于特定的活动。所有这些都可以在不影响实时代码的情况下完成,这很好。

这一切都运行良好,但现在能够“标记”源自GUI的消息非常有用,因此我可以在服务器处理时跟踪相同的消息。这对于调试和诊断系统问题非常有用,但我无法找到一种干净的方式(实际上我找不到任何方法!)这样做而不添加对我们的注册消息API的支持,这将是很多工作和涉及更多的风险比我现在感到舒服。由于服务器预先处理了一些消息,然后PostMessage()返回自身来执行操作,因此原始消息可能会“丢失”,这使事情变得更加复杂。

有没有人在这里解决这类问题?如果是这样,你能给我一些指示吗?如果没有,那么是否有任何记录或未记录的方法将一小块数据添加到Windows消息并在以后检索它?我看过SetMessageExtraInfo(),但这似乎是每个队列而不是每个消息。

1 个答案:

答案 0 :(得分:1)

FindWindow或FindWindowEx将为您提供GUI窗口的详细信息。将详细信息与拦截的消息进行比较