我正在开发一个捕获所有用户交互的项目。MSDN告诉(这个)
SetWindowsHookEx 可用于将 DLL 注入另一个进程。32位DLL不能注入64位进程,64位DLL不能注入32位进程。如果应用程序需要在其他进程中使用钩子,则需要 32 位应用程序调用 SetWindowsHookEx 将 32 位 DLL 注入 32 位进程,64 位应用程序调用 SetWindowsHookEx 将 64 位DLL 转换为 64 位进程。
我的问题是,如果应用程序是针对Any CPU
. 我是否需要SetWindowsHookEx
从针对Any CPU
.
我已经编写了 HookLogger_32.exe 加载 HookFunctions_32.dll(均为 x86)和 HookLogger_64.exe 加载 HookFunctions_64.dll(均为 x64)设置WH_CBT
和WH_MOUSE
全局(不是特定线程)。
HookLogger_32.exe、HookLogger_64.exe、HookFunctions_32.dll 和 HookFunctions_64.dll 是用 C++ 编写的。
当我单击基于 .NET 构建的应用程序时Any CPU
,这些 DLL 会被注入(通过SetWindowHookEx
)。Windows 操作系统挂起,我必须强制重启我的机器。
当针对 x86 或 x64 构建相同的 .NET 应用程序时,当我在 HookLoggers(32 位和 64 位)启动后单击该应用程序时,一切正常。
这种未定义行为的任何原因。
我工作的平台是 64 位机器。