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

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

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

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

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

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

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

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

最佳答案

FindWindow 或 FindWindowEx 将为您提供 GUI 窗口的详细信息。对比截获消息的细节

关于windows - 是否可以在进程之间跟踪 PostMessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15700863/

相关文章:

c++ - 从 std::string 转换为 DWORD

c - 在执行 _popen 时隐藏控制台窗口

c - WIN32 内存宏与 cstring 内存操作之间的区别?

c++ - 用于排序的比较器

c++ - 为什么不允许使用静态 const float ?

python - Pyinstaller 缺少 dll,exe 无法运行

python - 如何在 python 中获取 Windows 用户的全名?

java - 参数包含空格的运行时 exec

windows - 在Windows 10上链接两个Docker容器

c++ - 在 Windows 中获取当前注册的组织名称(公司名称)