SetWindowsHookex支持32位和64位应用程序

时间:2011-12-20 12:52:33

标签: c++ windows winapi 32bit-64bit

我在我的应用程序中使用Windows挂钩来确定是否已重新调整其他应用程序的大小。然后我根据其他应用程序的新大小采取一些措施。

这在纯32位环境和纯64位环境中工作正常(hook dll分别按照MSDN文档中的64位和32位编译)。

然而这是问题所在。由于Window 64bit OS中混合了32位和64位应用程序,如果我启动64位版本的应用程序,我无法监控32位应用程序,反之亦然。

有没有什么好方法可以做到这一点。它可能是一种完全不同的机制。

1 个答案:

答案 0 :(得分:1)

不幸的是,您只能将32位DLL注入32位进程,将64位DLL注入64位进程。这意味着您将需要2个版本的DLL。除此之外,必须从同一系列的可移植可执行文件调用SetWindowsHookEx()(也就是说,必须从32位代码调用32位进程,类似于64位进程)。

鉴于您的应用程序是64位,您必须启动32位程序的实例并让它设置挂钩。您可能希望将其中一个作为child,当您感兴趣的事件被困时,会通知parent

来自文档:

  

SetWindowsHookEx可用于将DLL注入另一个进程。一个   32位DLL无法注入64位进程和64位DLL   无法注入32位进程。如果申请需要   在其他进程中使用钩子,它需要一个32位   应用程序调用SetWindowsHookEx将32位DLL注入32位   进程和一个64位应用程序调用SetWindowsHookEx来注入一个   将64位DLL转换为64位进程。 32位和64位DLL必须具有   不同的名字。

相关问题