我在我的应用程序中使用Windows挂钩来确定是否已重新调整其他应用程序的大小。然后我根据其他应用程序的新大小采取一些措施。
这在纯32位环境和纯64位环境中工作正常(hook dll分别按照MSDN文档中的64位和32位编译)。
然而这是问题所在。由于Window 64bit OS中混合了32位和64位应用程序,如果我启动64位版本的应用程序,我无法监控32位应用程序,反之亦然。
有没有什么好方法可以做到这一点。它可能是一种完全不同的机制。
答案 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必须具有 不同的名字。