【发布时间】:2016-12-19 13:50:59
【问题描述】:
我正在尝试通过条形码扫描仪(作为键盘连接)为记录特定扫描代码编写后台应用程序。我编写了代码,它工作正常,但我想定义可以将输入发送到我的应用程序的设备
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
hhkLowLevelKybd = ::SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, 0, 0);
...
}
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
here i need check device
// check and log code
}
谢谢
【问题讨论】:
-
如果您需要设备信息以及输入事件,您必须使用Raw Input。
-
如果我使用 RegisterRawInputDevices 并捕获 INPUT 消息,我有正确的设备,但是,我的回调 LowLevelKeyboardProc 在我收到 INPUT 消息之前调用(
-
你为什么要使用低级钩子?它不提供任何设备信息。如果您需要处理来自特定设备的事件,请仅使用原始输入事件,不要使用低级挂钩。原始输入消息为您提供输入的键盘数据。此外,原始输入 API 允许您注册特定设备以将事件发送到特定 HWND,因此当您收到输入消息时,您已经知道它们来自哪个设备,而无需从消息数据中找出。我认为你让事情变得过于复杂,以至于你试图完成的事情。
-
我使用低级钩子,因为我需要防止输入一些符号,所以,可能存在更简单的方法来做到这一点......