我正在尝试编写一个应用程序,该应用程序在按下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_LLWH_MOUSE_LL

    08-27 02:07