我正在尝试编写一个应用程序,该应用程序在按下Shift键时就会响应,无论当前焦点在哪个应用程序上。
我尝试使用SetWindowsHookEx()
和GetKeyboardState()
进行了此操作,但是这两种方法仅在应用程序的窗口具有焦点时才起作用。我需要它在全局范围内工作。
我该怎么做呢?
最佳答案
提供的答案都无法帮助我解决问题,但我自己找到了答案。这里是。
将SetWindowsHookEx()
与WH_KEYBOARD_LL
一起使用是正确的方法。但是,SetWindowsHookEx()
的其他参数并不直观:
dwThreadId
必须为0。hMod
需要指向某个DLL。我用了User32
,它是一个始终以任何方式加载的DLL,并且由所有人使用GUI的进程。我是从a CodeProject post about this得到这个想法的。
因此,代码看起来像这样:
instance = LoadLibrary("User32");
hhook = SetWindowsHookEx(WH_KEYBOARD_LL, hookFunction, instance, 0);
文档尚不清楚倒数第二个参数。它说:
它没有声明这仅适用于某些类型的挂钩,而不适用于
WH_KEYBOARD_LL
和WH_MOUSE_LL
。