Я занимаюсь интеграцией поддержки USB-сканеров штрих-кодов в приложение WPF, но я попал в ловушку.Блокировка ввода с клавиатуры HID
В настоящее время я успешно идентифицирую и записываю ввод с помощью статьи this.
Проблема, с которой я столкнулся, заключается в том, что, хотя я успешно идентифицирую и маршрутизирую вход с устройства сканера, я не могу заблокировать входные события для дальнейшей обработки (например, если в элементе управления текстовыми полями на моем приложении есть фокус ввода, вход со сканера будет записан на него).
Я попробовал два метода захвата ввода: определение
var wndSourceHandle = HwndSource.FromHwnd(new WindowInteropHelper(
_wndEventSource = value).Handle);
wndSourceHandle.AddHook(this.WndProc);
WndProc:
private IntPtr WndProc(IntPtr hwnd, int iMessage, IntPtr wParam, IntPtr lParam, ref bool bisHandled)
{
if (iMessage == Win32.WM_INPUT)
{
var result = ProcessRawInput(lParam);
bisHandled = result != null && result.Value;
return IntPtr.Zero;
}
return IntPtr.Zero;
}
Как также:
ComponentDispatcher.ThreadFilterMessage += (ref MSG msg, ref bool handled) =>
{
if (msg.message == Win32.WM_INPUT)
{
var result = ProcessRawInput(msg.lParam);
handled = result != null && result.Value;
return;
}
handled = false;
};
Метод ProcessRawInput возвращает истину, если источник вход - сканер штрих-кода, в противном случае - false.
Работает ли приложение, когда программа сведена к минимуму? - так что, если вы сканируете на рабочем столе, вы приложение поймаете данные? – Mathias
Я протестировал и поймал данные штрих-кода, даже если программа сведена к минимуму. Для моих требований это не проблема. – RiaanDP