0

我在应用程序中连接键盘。要求是在进程中的所有线程中挂钩键盘。

我使用了 SetWindowsHookEx API

SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)::KeyboardHookProc, hInst, 0);

钩子是为进程中的所有线程创建的。这工作正常,直到调用线程存在。一旦调用线程终止钩子停止工作。

有没有办法挂钩进程而不是进程中的线程。

4

3 回答 3

2

用于 LowLevelKeyboardProc 的 SDK 文档中的这一精美文字至关重要:

这个钩子在安装它的线程的上下文中被调用。通过向安装钩子的线程发送消息来进行调用。因此,安装钩子的线程必须有一个消息循环。

换句话说,您必须保持线程处于活动状态并且线程必须泵送消息循环。您现在看到的行为完全是设计使然。

于 2009-11-24T18:45:11.917 回答
0

根据 MSDN ,WH__KEYBOARD___LL 是全局应用的,而不是特定于应用程序的。

如果要为特定于进程的线程安装钩子,请使用 WH___KEYBOARD

于 2009-11-24T10:15:20.087 回答
0

只需在 main 函数中安装钩子即可。如果仅在特定线程运行时才需要它,则可以使用 volatile 标志。

于 2009-11-24T17:08:39.117 回答