【问题标题】:In VB 2013, is there a way to differentiate between a keyboard entry and a scanner entry?在 VB 2013 中,有没有办法区分键盘输入和扫描仪输入?
【发布时间】:2014-06-25 14:01:38
【问题描述】:

在 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

【问题讨论】:

  • 我假设您的意思是一些连接到键盘端口或其他串行/自定义端口的扫描仪硬件?这些扫描仪最常用的方法是模拟数字所需的按键顺序,所以不,软件将无法轻松判断“击键”来自何处。
  • does not work properly 表示它读取错误的条目或只是空白?

标签: vb.net keypress


【解决方案1】:

这不是很容易做到,但您可以区分来自不同设备的输入。

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

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

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我没有建议任何干净的解决方案,因为扫描仪通常会以与普通键盘相同的方式发送按键。

    但是,您可以尝试计算每个 KeyPress 事件之间的毫秒数。实际上,扫描仪发送 KeyPress 的速度通常比人类通常在键盘上键入的速度要快。

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

    • 如果扫描仪返回单个 KeyPress 事件,它将不起作用。

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

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

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

    在使用此解决方案之前,我肯定会尝试 Sam Makin 的解决方案,该解决方案似乎更强大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-12
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多