我有一个带有两个HID键盘的系统(实际上,其中一个是条形码扫描器)。我注册设备(‘条形码扫描仪’)来读取原始输入数据。
我将RIDEV_NOLEGACY | RIDEV_INPUTSINK
设置为dwFlags of RAWINPUTDEVICE
。然后,我可以在代码中读取和处理原始输入数据。
但是,由于我设置了RIDEV_NOLEGACY
dwFlags,另一个通用键盘不能将任何东西输入到XAML上的TextBox中。这不是我想要的。我只想阻止条形码扫描仪直接进入文本框,而不是所有键盘。
下面是代码示例(您需要安装nuget包'sharplibhid'):
private SharpLib.Hid.Handler iHidHandler;
private void Window1_Loaded(object sender, RoutedEventArgs e)
{
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
RAWINPUTDEVICE[] rid = new RAWINPUTDEVICE[1];
rid[0].usUsagePage = 0x01;
rid[0].usUsage = 0x06;
rid[0].dwFlags = RawInputDeviceFlags.RIDEV_INPUTSINK | RawInputDeviceFlags.RIDEV_NOLEGACY;
rid[0].hwndTarget = source.Handle;
iHidHandler = new SharpLib.Hid.Handler(rid);
iHidHandler.OnHidEvent += HandleHidEventThreadSafe;
}
public void HandleHidEventThreadSafe(object aSender, SharpLib.Hid.Event aHidEvent)
{
if (aHidEvent.IsStray)
{
//Stray event just ignore it
return;
}
else
{
// do something...
if (aHidEvent.Device.ProductId == xxx && aHidEvent.Device.VendorId == xxx)
{
Debug.WriteLine(aHidEvent.VirtualKey.ToString());
}
}
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
Message message = Message.Create(hwnd, msg, wParam, lParam);
switch (msg)
{
case Const.WM_INPUT:
iHidHandler.ProcessInput(ref message);
handled = true;
break;
}
return IntPtr.Zero;
}
发布于 2022-03-05 13:34:52
我建议使用简单的textBox来读取各种键盘,在条形码读取器中主动传递,解码条形码后进入,这样就可以同时读取键盘和条形码读取器的数据。
https://stackoverflow.com/questions/71248240
复制相似问题