WPF определяет ASCII-префикс сканера штрих-кода в previewKeyDown - PullRequest
1 голос
/ 13 апреля 2020

У меня 2D-сканер штрих-кода, настроенный как устройство ввода HID (действует как обычная клавиатура). Я планировал провести различие между вводом с клавиатуры пользователя и вводом сканера штрих-кода путем поиска префикса и суффикса, который сканер штрих-кода может добавить к отсканированным символам.

В настоящее время я настроил сканер штрих-кода для использования ASCII 0x02 ( Начало текста) в качестве префикса и 0x03 (Конец текста) в качестве суффикса.

Как я могу обнаружить эти специальные входы ASCII в C#? Я использую 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();
}

К сожалению, ни один из 2 вариантов (сохраненных в 2 строках) на самом деле помог обнаружить специальные входные данные.

  • e.Key.ToString () всегда просто выводит "System" для входов 0x02 или 0x03.
  • KeyInterop.VirtualKeyFromKey (e.Key) дает 0x00 0x00 в качестве выхода для входа ASCII 0x02; и 0x00 0x00 0xD в качестве выхода для входа ASCII 0x03 (что плохо, потому что 0xD - это VKEY_RETURN).

Есть ли способ получить действительный код ASCII ввода?

1 Ответ

1 голос
/ 14 апреля 2020

Если вы получаете Key.System, отметьте e.SystemKey

int vkey = KeyInterop.VirtualKeyFromKey(e.Key == Key.System ? e.SystemKey : e.Key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...