7

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

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

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

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

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

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

4

1 回答 1

1

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

于 2013-05-03T07:03:48.327 回答