Spy ++ 32和64位不允许两者同时运行。为什么?

时间:2013-10-02 15:48:57

标签: winapi messages

我正在调试32位端口到64位平台。有一个错误导致其中一个窗口仅在64位版本上无法正确响应消息。所以我并排运行它们并尝试在它们上使用Spy ++。

事实证明,您不能在64位应用程序上使用Spy ++ 32,反之亦然。事实证明,您不能同时运行Spy ++ 32和64位版本。

这是怎么回事?如何解决这个问题。是否存在拦截32位和64位版本消息的等效项?

1 个答案:

答案 0 :(得分:3)

Spy使用消息钩子拦截消息。消息挂钩必须位于DLL中,并且无法将32位DLL加载到64位进程中(反之亦然)。至于无法同时运行这两个版本,我怀疑这是因为钩子DLL使用相同的方法发送到应用程序,因此您只能运行一个应用程序。

实现单个拦截器非常困难,原因有两个:

  1. SetWindowsHookEx不允许32位应用程序在64位进程中设置挂钩(反之亦然),因此您需要两个exes(和两个DLL)来实现这一点,以及一些IPC将结果传达给公共主机的机制;
  2. 钩子需要快速(以最小化影响)并且大多数IPC机制会太慢。