Raw输入另一个键盘钩?

Kai*_*aan 5 c++ keyboard hook winapi input

快速提问 -

我正在阅读关于键盘钩子和一个建议使用Raw Input来做这个,但我没有找到任何它的例子.例如我正在使用

RAWINPUTDEVICE rid[1];
rid[0].usUsagePage = 0x01;
rid[0].usUsage = 0x06;
rid[0].hwndTarget = hWnd;
rid[0].dwFlags = 0;
RegisterRawInputDevices(rid, 1, sizeof(rid[0]));
Run Code Online (Sandbox Code Playgroud)

并且在应用程序自己的窗口中使用WM_INPUT,但不在应用程序之外.这可能在应用程序之外,还是必须使用WH_KEYBOARD或WH_KEYBOARD_LL?MSDN没有说清楚Raw Input是否可以在全球范围内制作.

编辑:我知道Hooks,但我想知道你是否可以用Raw输入做到这一点!

干杯

The*_*ish 7

查看有关该内容的MSDN文档,有一个被调用的标志RIDEV_INPUTSINK,其描述为:"如果设置,这使得调用者即使在调用者不在前台时也能接收输入."

我自己并没有弄乱,但听起来它可能对从应用程序窗口之外获取输入很有用.


Vla*_*mir 0

Windows 挂钩是一种可以在事件到达应用程序之前拦截事件的机制。过滤器函数(接收事件的函数)根据事件类型进行分类。如果想要附加到 Windows 挂钩,则必须使用 来安装过滤器功能SetWindowsHookEx。我不得不提一下,全局钩子必须位于单独的 dll 文件中。您可以在MSDN中阅读有关钩子的更多信息。

  • 实际上,您可以使用 RIDEV_INPUTSINK 来接收所有键盘输入,而不管焦点如何。 (3认同)
  • 理解,尤其是在您编辑问题之后:)我认为原始输入消息仅在您的应用程序中可用,而不是全局可用。如果你想全局过滤消息,我认为你必须使用钩子...... (2认同)