在VB 2013中,有没有办法区分键盘输入和扫描仪条目?

时间:2014-06-25 14:01:39

标签: vb.net keypress

在Visual Basic 2013中,有没有办法区分键盘输入和扫描仪条目?

我们有一个程序,用户可以将数字扫描到我们的系统中。在极少数情况下,当扫描仪无法正常工作时,用户必须手动输入数字。据我所知,VB看到扫描仪条目的方式与看到键盘输入的方式相同。是否有一些代码可以检查差异?以下是我的开始:

Private Sub CARD_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs)   Handles CARD.KeyPress
        If e.KeyChar = Convert.ToChar(Keys.Enter) Then
            If Me.CARD.Text <> "" Then
               CardValidation()
            End If
        ElseIf e.KeyChar <> "" Then ' if entry a KEYPRESS then 
            DisplayErrorCodes()
        End If
    End Sub

2 个答案:

答案 0 :(得分:1)

这不是一件容易的事,但您可以区分不同设备的输入。

这是一篇关于CodeProject的优秀文章,它涵盖了这个确切的主题,在这里:

http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

希望这有帮助!

答案 1 :(得分:1)

我没有任何干净的解决方案,因为扫描仪通常会像普通键盘一样发送密钥。

但是,您可以尝试计算每个KeyPress事件之间的毫秒数。实际上,扫描仪通常会比人们通常在键盘上键入的内容更快地发送KeyPress。

当然,这个解决方案有它的局限性:

  • 如果扫描仪返回单个KeyPress事件,则无效。

  • 人类打字和扫描仪输入之间的毫秒阈值非常具有启发性。

  • 它需要在每个KeyPress事件之间进行处理,并且只有在一系列KeyPress事件之后才会确定上下文。

  • 您需要定义在最后一次KeyPress事件之后等待的毫秒数,以便将扫描仪输入标记为已完成(也非常具有启发性)。

在使用此解决方案之前,我明确地尝试了Sam Makin的解决方案,这似乎更加强大。