WPF 在 previewKeyDown 中检测条码扫描器的 ASCII 前缀
WPF detect ASCII prefix of barcode scanner in previewKeyDown
我有一个二维条码扫描仪配置为 HID 输入设备(用作普通键盘)。
我的计划是通过查找条码扫描器可以添加到扫描字符的前缀和后缀来区分用户键盘输入和条码扫描器输入。
我目前已将条码扫描仪配置为使用 ASCII 0x02(文本开始)作为前缀,0x03(文本结束)作为后缀。
如何在 C# 中检测这些特殊的 ASCII 输入?
我正在使用 KeyEventHandler 来检测 PreviewKeyDown 和 PreviewKeyUp 上的按键输入。
我试过:
public MainWindow()
{
this.PreviewKeyDown += new KeyEventHandler(PreviewKeyDownEventBarcodeScanner);
this.PreviewKeyUp += new KeyEventHandler(PreviewKeyUpEventBarcodeScanner);
}
private void PreviewKeyDownEventBarcodeScanner(object sender, KeyEventArgs e) {
int vkey = (int)KeyInterop.VirtualKeyFromKey(e.Key);
stringOfVKeyInputs += vkey.ToString() + " ";
stringOfKeyToTextInputs += e.Key.ToString();
}
不幸的是,none 2 个变体(保存在 2 个字符串中)确实有助于检测特殊输入。
- e.Key.ToString() 对于 0x02 或 0x03 输入总是只输出 "System"。
- KeyInterop.VirtualKeyFromKey(e.Key) 给出 0x00 0x00 作为 ASCII 0x02 输入的输出;和 0x00 0x00 0xD 作为 ASCII 0x03 输入的输出(这很糟糕,因为 0xD 是 VKEY_RETURN)。
有没有办法得到输入的实际ASCII码?
如果您收到 Key.System
,请检查 e.SystemKey
int vkey = KeyInterop.VirtualKeyFromKey(e.Key == Key.System ? e.SystemKey : e.Key);
我有一个二维条码扫描仪配置为 HID 输入设备(用作普通键盘)。 我的计划是通过查找条码扫描器可以添加到扫描字符的前缀和后缀来区分用户键盘输入和条码扫描器输入。
我目前已将条码扫描仪配置为使用 ASCII 0x02(文本开始)作为前缀,0x03(文本结束)作为后缀。
如何在 C# 中检测这些特殊的 ASCII 输入? 我正在使用 KeyEventHandler 来检测 PreviewKeyDown 和 PreviewKeyUp 上的按键输入。
我试过:
public MainWindow()
{
this.PreviewKeyDown += new KeyEventHandler(PreviewKeyDownEventBarcodeScanner);
this.PreviewKeyUp += new KeyEventHandler(PreviewKeyUpEventBarcodeScanner);
}
private void PreviewKeyDownEventBarcodeScanner(object sender, KeyEventArgs e) {
int vkey = (int)KeyInterop.VirtualKeyFromKey(e.Key);
stringOfVKeyInputs += vkey.ToString() + " ";
stringOfKeyToTextInputs += e.Key.ToString();
}
不幸的是,none 2 个变体(保存在 2 个字符串中)确实有助于检测特殊输入。
- e.Key.ToString() 对于 0x02 或 0x03 输入总是只输出 "System"。
- KeyInterop.VirtualKeyFromKey(e.Key) 给出 0x00 0x00 作为 ASCII 0x02 输入的输出;和 0x00 0x00 0xD 作为 ASCII 0x03 输入的输出(这很糟糕,因为 0xD 是 VKEY_RETURN)。
有没有办法得到输入的实际ASCII码?
如果您收到 Key.System
,请检查 e.SystemKey
int vkey = KeyInterop.VirtualKeyFromKey(e.Key == Key.System ? e.SystemKey : e.Key);