得到条形码阅读器价值形式背景监测

ham*_*uri 10 .net c# winforms

我想用c#语言创建一个会计程序.我想使用条形码阅读器在商店中搜索产品(这对于我的程序是可选的)现在,如果卖家使用条形码阅读器,则以主要形式获取处理方法或事件的条形码值; 如何在窗体背景(没有文本框)中获取句柄方法或事件的条形码值?

注意:我的条形码阅读器是HID(USB接口)

lti*_*_sh 18

条形码设备的行为类似于键盘.当您将焦点放在文本框中时,它会将字符发送到文本框,就像您从键盘输入它们一样.

如果您不想使用文本框,则需要订阅键盘事件处理程序以捕获条形码流.

Form1.InitializeComponent():

this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);
Run Code Online (Sandbox Code Playgroud)

处理及配套物品:

DateTime _lastKeystroke = new DateTime(0);
List<char> _barcode = new List<char>(10);

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    // check timing (keystrokes within 100 ms)
    TimeSpan elapsed = (DateTime.Now - _lastKeystroke);
    if (elapsed.TotalMilliseconds > 100)
        _barcode.Clear();

    // record keystroke & timestamp
    _barcode.Add(e.KeyChar);
    _lastKeystroke = DateTime.Now;

    // process barcode
    if (e.KeyChar == 13 && _barcode.Count > 0) {
        string msg = new String(_barcode.ToArray());
        MessageBox.Show(msg);
        _barcode.Clear();
    }
}
Run Code Online (Sandbox Code Playgroud)

您必须跟踪"击键"并注意与条形码流一起发送的"回车".这可以很容易地在一个数组中完成.要区分用户击键和条形码击键,您可以做的一个脏技巧是跟踪击键的时间.

例如,如果你得到一个小于100毫秒的击键流,以一个回车结束,你可以假设它是条形码并相应地处理.

或者,如果条形码扫描仪是可编程的,您还可以发送特殊字符或序列.