キーボード入力タイプのバーコードリーダ

工場向けの案件でキーボード入力タイプ(HID)のバーコードリーダを使用することがあります。

キーボードフックを使用してバーコード入力を取得するようにしていたのですが、取得したキーコードでは押されたキーが分かるだけなので、実際にはShiftキーやCtrlキーとのコンビネーションによって、キーコードから文字に変換する必要があります。
今までこの実装を適当に行っており、Shiftキーによる変換があまりできておらず、正しく読めない記号がありました。
今回、実装を見直しまして、ほぼ全てのパターンを網羅できたと思います。

以下がShiftキーを考慮した文字変換です。

return KeyCode switch {
    (int)Keys.Multiply => '*',
    (int)Keys.Separator => '|',
    (int)Keys.Add => '+',
    (int)Keys.Subtract => '-',
    (int)Keys.Decimal => '.',
    (int)Keys.Divide => '/',
    (int)Keys.Oemplus => shift ? '+' : ';',
    (int)Keys.Oemcomma => shift ? ' shift ? '=' : '-',
    (int)Keys.OemPeriod => shift ? '>' : '.',
    (int)Keys.Oem1 => shift ? '*' : ':',
    (int)Keys.Oem2 => shift ? '?' : '/',
    (int)Keys.Oem3 => shift ? '`' : '@',
    (int)Keys.Oem4 => shift ? '{' : '[',
    (int)Keys.Oem5 => shift ? '|' : '\\',
    (int)Keys.Oem6 => shift ? '}' : ']',
    (int)Keys.Oem7 => shift ? '~' : '^',
    (int)Keys.Oem102 => shift ? '_' : '\\',
    (int)Keys.NumPad0 => '0',
    (int)Keys.NumPad1 => '1',
    (int)Keys.NumPad2 => '2',
    (int)Keys.NumPad3 => '3',
    (int)Keys.NumPad4 => '4',
    (int)Keys.NumPad5 => '5',
    (int)Keys.NumPad6 => '6',
    (int)Keys.NumPad7 => '7',
    (int)Keys.NumPad8 => '8',
    (int)Keys.NumPad9 => '9',
    (int)Keys.D0 => '0',
    (int)Keys.D1 => shift ? '!' : '1',
    (int)Keys.D2 => shift ? '"' : '2',
    (int)Keys.D3 => shift ? '#' : '3',
    (int)Keys.D4 => shift ? '$' : '4',
    (int)Keys.D5 => shift ? '%' : '5',
    (int)Keys.D6 => shift ? '&' : '6',
    (int)Keys.D7 => shift ? '\'' : '7',
    (int)Keys.D8 => shift ? '(' : '8',
    (int)Keys.D9 => shift ? ')' : '9',
    >= (int)Keys.A and <= (int)Keys.Z => shift ? (char)KeyCode : (char)(KeyCode + 0x20),
    _ => char.ConvertFromUtf32(KeyCode)[0]
};

コメントを残す