64位Windows中的Hook 32位进程

时间:2012-07-12 08:21:19

标签: c++ windows winapi hook

我在window7 64bit上使用键盘钩子时遇到问题。 我做这些事情:  1.创建一个32位的DLL  2.将其加载到应用程序并setWindowHookEx

我已经成功连接到32位应用程序(Y!M,Skype ......)但是当我挂在我的桌面或任何64位应用程序(记事本)上时,应用程序会冻结,直到我停止我的钩子应用程序。 我创建64位dll,在上面做同样的事情,并在32位进程中遇到同样的问题。

所以,我认为问题出在我的32bit dll上,不能注入64bit进程。但我不知道如何在窗口聚焦的时候注入64位dll进行处理。

我想知道任何方式,以及如何做到这一点。或者我可以只挂钩32位进程而不挂钩64位进程,你能告诉我如何做到这一点。 感谢。

1 个答案:

答案 0 :(得分:2)

问题是您无法将32位DLL加载到64位进程中,或者将64位DLL加载到32位进程中。来自Programming Guide for 64-bit Windows

  

... 32位进程无法加载64位DLL执行,64位进程无法加载32位DLL执行。

您需要拥有两个版本的DLL:32位和64位。但这只是一个部分解决方案。此外,您需要确定要加载DLL的进程的体系结构。 WINAPI函数GetBinaryType()可以确定,但它需要一个代码必须获取的二进制文件的路径。