代码之家  ›  专栏  ›  技术社区  ›  Elazar Leibovich

在我的线程上下文中生成`SetWindowsHookEx`调用函数

  •  0
  • Elazar Leibovich  · 技术社区  · 14 年前

    为了使用 SetWindowsHookEx 在GUI应用程序中,您通常希望在发生事件时在线程中调用一个函数。

    AddKeyToList(int vkeycode)

    我不是Windows内部的专家,但是如果我正确理解了文档,hooks是由 键盘钩子 在导致它们所挂接的事件的线程的上下文中被调用。因此,要做到我所描述的,我们需要:

    1. 创建一个包含hook函数的DLL,并在其中创建一个共享内存区域,所有线程都将通过它共享并相互通信。

    2. pInvoke 类似于钩子函数和GUI程序中的机制。在我们的示例中,hook函数将把按下的键发送给GUI程序,GUI程序将在自己的上下文中调用 AddKeyToList 功能。

    对于一个相对简单的类来说,这是非常复杂的(与unix世界中的XRecord扩展相比),如果您使用 Qt

    是否有任何库(最好是开源库)已经实现了这些机制,并允许我使用一个“facade”,例如,它将调用一个函数 在我的线程上下文中 每当 WH_KEYBOARD_LL 发生?

    我的分析是正确的,还是有更简单的方法来实现我所描述的?

    你能 夸脱

    1 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

    这已经是WH\u KEYBOARD\u LL hook的默认行为。回调是在调用SetWindowsHookEx()的同一线程中调用的。该线程还必须泵送一个消息循环,以便在使用UI线程时自动正常工作。回调代码也不需要存在于DLL中,它不是需要DLL注入的全局钩子。