【发布时间】:2011-08-20 22:42:32
【问题描述】:
已经阅读了很多关于此的内容,但图片变得更加混乱。我有一个 32 位应用程序,它安装了一个 KeyboardHook 来等待全局热键并唤醒。在 Win 7 x64 版本上运行它我注意到按下热键时它会挂起 Outlook x64 版本。
所以我做了一些研究,看起来 32 位键盘挂钩甚至不应该在 64 位应用程序中工作。是时候进行更多测试了...
它们的热键在 64 位记事本、写字板和便笺中运行良好。我验证了这些是 64 位应用程序,因为它们在任务管理器中旁边没有“*32”。不会挂起应用程序,它会做它应该做的事情。但是等等……一个 32 位的钩子 dll 不能加载到 64 位的应用程序中,对吧?
查看 Process Explorer 显示挂钩 dll 甚至没有加载到记事本进程中! (如果我从 WOW64 目录运行 32 位 notepad.exe,我可以看到加载到进程中的 dll,所以我知道我使用的工具正确)。
所以 Outlook 挂起问题可能相关,也可能不相关,但为什么挂钩在 64 位记事本中仍然有效?
【问题讨论】:
-
有两种键盘挂钩类型。低级不需要DLL注入。
-
感谢您的提示。我应该研究低级挂钩。目前我正在使用带有 WH_KEYBOARD 的 SetWindowsHookEx()。现在我正在探索似乎也不需要 DLL 的 RegisterHotKey()。
-
查看并测试 WH_KEYBOARD_LL,似乎它确实需要 dll 注入。我无法注册钩子,并且网上的许多参考资料都说需要 DLL。想法?
-
好的,WH_KEYBOARD_LL 在同一个进程中工作。 hMod 参数必须使用 GetModuleHandle(NULL) 设置。似乎与文档相反,但它正在工作。感谢您的提示!
标签: dll windows-7 64-bit keyboard-hook windows64