【问题标题】:32-bit Keyboard Hook unexpectedly works in 64-bit apps, but is hanging Outlook32 位键盘挂钩在 64 位应用程序中意外工作,但挂起 Outlook
【发布时间】: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


【解决方案1】:

我有一个 32 位应用程序,它安装了 KeyboardHook 以等待全局热键并唤醒。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多