在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
答案 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的解决方案,这似乎更加强大。