Dll 32位键盘钩子意外地在64位应用程序中工作,但却挂起了Outlook

Dll 32位键盘钩子意外地在64位应用程序中工作,但却挂起了Outlook,dll,windows-7,64-bit,keyboard-hook,windows64,Dll,Windows 7,64 Bit,Keyboard Hook,Windows64,我已经读了很多关于这一点的书,但画面变得越来越模糊。我有一个32位的应用程序,它安装了一个键盘挂钩来等待一个全局热键并唤醒。在Win 7 x64 edition上运行它时,我注意到当按下热键时,它会挂起Outlook x64 edition 所以我做了一些研究,看起来32位键盘挂钩甚至不应该在64位应用程序中工作。是时候做更多的测试了 在64位记事本、写字板和便笺中,它们的热键工作正常。我验证了这些是64位应用程序,因为在任务管理器中它们旁边没有“*32”。不会挂起应用程序,它会执行它应该执行的

我已经读了很多关于这一点的书,但画面变得越来越模糊。我有一个32位的应用程序,它安装了一个键盘挂钩来等待一个全局热键并唤醒。在Win 7 x64 edition上运行它时,我注意到当按下热键时,它会挂起Outlook x64 edition

所以我做了一些研究,看起来32位键盘挂钩甚至不应该在64位应用程序中工作。是时候做更多的测试了

在64位记事本、写字板和便笺中,它们的热键工作正常。我验证了这些是64位应用程序,因为在任务管理器中它们旁边没有“*32”。不会挂起应用程序,它会执行它应该执行的操作。但是等等。。。32位钩子dll不能加载到64位应用程序中,对吗

查看Process Explorer,就会发现挂钩dll甚至没有加载到记事本进程中!(如果我从WOW64目录运行32位notepad.exe,我可以看到加载到进程中的dll,因此我知道我正确使用了这些工具)

因此,Outlook挂起问题可能与此相关,也可能与此无关,但为什么钩子在64位记事本中还能工作呢

我有一个32位的应用程序,它安装了一个键盘挂钩来等待一个全局热键并唤醒

如果这是您的最终目标,那么使用它会更简单,对系统的影响也更小

我有一个32位的应用程序,它安装了一个键盘挂钩来等待一个全局热键并唤醒


如果这是您的最终目标,那么只使用它会更简单,对系统的影响更小。

有两种键盘挂钩类型。低级的不需要DLL注入。谢谢你的提示。我应该调查一下低水平的挂钩。目前我正在使用带有WH_键盘的SetWindowsHookEx()。现在,我正在探索RegisterHotKey(),它似乎也不需要DLL。查看并测试WH\u KEYBOARD\u LL,它似乎确实需要DLL注入。我无法让钩子注册,许多在线参考都说需要DLL。想法?好吧,让键盘在同一个过程中工作。必须使用GetModuleHandle(NULL)设置hMod参数。似乎与文件相反,但它起作用了。谢谢你的提示!有两种键盘挂钩类型。低级的不需要DLL注入。谢谢你的提示。我应该调查一下低水平的挂钩。目前我正在使用带有WH_键盘的SetWindowsHookEx()。现在,我正在探索RegisterHotKey(),它似乎也不需要DLL。查看并测试WH\u KEYBOARD\u LL,它似乎确实需要DLL注入。我无法让钩子注册,许多在线参考都说需要DLL。想法?好吧,让键盘在同一个过程中工作。必须使用GetModuleHandle(NULL)设置hMod参数。似乎与文件相反,但它起作用了。谢谢你的提示!