区分扫描仪和键盘

本文关键字:键盘 扫描仪 | 更新日期: 2023-09-27 17:49:55

我有一个条形码扫描器连接到一台电脑上,用c#程序工作。现在我要区分一下扫描仪和键盘哪一个向我的程序发送数据。每个人都可以帮助我的代码或建议在c#?

有人在另一个话题中对我说过(但我还不能这样做):基本上你可以配置扫描器发送一些字符基本上告诉电脑"嗨,是我"当您在输入流中看到这些字符时,您就知道这些信息来自条形码扫描器,而不是来自用户在键盘上键入的内容。你看过条形码扫描器附带的说明书了吗?它应该有更多关于这个的信息

区分扫描仪和键盘

查看更新,截至2019年3月:https://stackoverflow.com/a/55411255/495455


如果您的应用程序使用特定的条形码(例如所有相同的字符长度或可以与RegEx匹配的条形码),那么您可以通过编写机器人打字测试来解决这个问题。如:

VB。Net:

Private sw As Stopwatch
Private Sub FirstCharacterEntered()
    sw.Start()
End Sub
Private Sub txt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt.TextChanged
    If txt.length = 0 Then FirstCharacterEntered()
    If txt.Length = BarCodeSerialLength Or New RegularExpressions.Regex("your pattern").IsMatch(txt.Text) Then
        sw.Stop()
        If sw.ElapsedMilliseconds < TimeAHumanWouldTakeToType Then
            'Input is from the BarCode Scanner
        End If    
    End If
End Sub
c#

:

private Stopwatch sw;
private void FirstCharacterEntered()
{
    sw.Start();
}
private void txt_TextChanged(System.Object sender, System.EventArgs e)
{
    if (txt.length == 0)
        FirstCharacterEntered();
    if (txt.Length == BarCodeSerialLength | new RegularExpressions.Regex("your pattern").IsMatch(txt.Text)) {
        sw.Stop();
        if (sw.ElapsedMilliseconds < TimeAHumanWouldTakeToType) {
            //Input is from the BarCode Scanner
        }
    }
}

扫描数据通常以回车或换行字符结束,称为后缀。您也可以配置扫描器以包含前缀。这就是你的朋友想告诉你的。