SetWindowsHookEx(WH_KEYBOARD) - 64 位和 32 位钩子不能同时工作

Roy Li - MSFT 33,371 信誉分 Microsoft 供应商
2024-08-15T06:38:15.5633333+00:00

你好!我尝试使用 SetWindowsHookEx(WH_KEYBOARD) 安装 hook,我看到 32 位钩子和 64 位钩子不能同时工作。如果我安装两者,只有 64 位钩子可以工作,而 32 位则不能。

我通过算法解决了这个问题,该算法根据拥有前景窗口的进程的位数选择适当的位数。其中一个钩子我关掉,另一个我打开。目前,仅安装了 32 位钩子,或者仅安装了 64 位钩子。这解决了,但很困难。

SetWindowsHookEx() 的文档说 32 位和 64 位都可以同时工作。我理解正确吗?

https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexw 要挂接 64 位 Windows 安装的桌面上的所有应用程序,请安装 32 位全局挂接和 64 位全局挂钩,每个钩子都来自适当的进程,并确保在挂钩应用程序中保持抽取消息,以避免阻塞正常运行。如果您已经有一个 32 位全局挂钩应用程序,并且它不需要在每个应用程序的上下文中运行,则可能不需要创建 64 位版本。

那么,为什么它不起作用?

 

此问题由: SetWindowsHookEx(WH_KEYBOARD) - 64-bit and 32-bit hooks don't work simultaneously - Microsoft Q&A总结而来

Windows API - Win32
Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
105 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Tong Xu - MSFT 2,471 信誉分 Microsoft 供应商
    2024-08-15T07:23:46.9633333+00:00

    你好,

    欢迎来到 Microsoft Q&A!

    讨论后,最好与特定线程一起使用,而不是与所有线程(全局)一起使用。没有证据表明WH_KEYBOARD存在问题。如果问题对您有重大影响,请打开事件。

    由于此问题很复杂,请通过以下链接的“联系我们”选项卡打开事件,以便我们的工程师可以与您密切合作: https://developer.microsoft.com/en-us/windows/support/ 并请选择此问题的 Windows SDK 的“技术支持 - 编码/调试”。

    此外,如果支持工程师确定问题是由 bug 导致的,则服务请求将免费,并且不会向您收费。


    如果答案是正确的解决方案,请单击“接受答案”并请投赞成票。如果您对此答案有其他疑问,请点击“评论”。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。