我怎样才能找到价值来自VB.NET中的键盘或条形码阅读器

时间:2013-01-05 10:35:01

标签: vb.net

我在VB.NET中有一个Windows应用程序。我想知道用户是否通过键盘输入了值,或者是否来自条形码阅读器。我想存储来自的值 键盘在与条形码阅读器不同的数据库中。

1 个答案:

答案 0 :(得分:2)

选项1:

获取连接到串行端口的条形码扫描器(通过COM端口读取的原始串行设备)。由于大多数条码扫描器模拟键盘敲击,因此无法直接区分条形码扫描器输入和键盘输入(请参阅下一个选项)而不会进入低级别(请参阅上次更新)。

一个连接到串行端口(或通过USB模拟一个串行端口不再那么常见)可让您完全控制输入的来源。

选项2:

计算按时间键入的字符数。与键入相比,条形码扫描器可以非常快速地注入序列(线)。通过计算按键来测量文本框中使用的时间(使用CR + LF作为测量点,因为这些也是由扫描仪发送的)可以为您提供一种方法来区分人类是否正在键入(除非有一个人快速打字)如f)或注入的内容。如果超时,只需拒绝/清除输入。

此外,条形码的校验和(如果使用包含该条形码的条形码)可用于在时间测量之外进行额外验证。

(您可以通过覆盖ctrl + v来检测粘贴,如下一个选项中所示)。

选项3:

组合选项2但不是在文本框中使用度量来点击ProcessCmdKey()函数(通过覆盖它)并测量文本框是否具有焦点。这样,您可以先缓冲输入,测量时间,如果在设置的超时值内,则将该行注入文本框。

选项4:

这也许是一个不错的选择:
http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/

选项5:非技术方法 -

可用性改进:在视觉上非常清楚,条形码必须使用扫描仪输入而不是键入。我包括作为一个选项,因为它很简单,如果正确也有效(不幸的是,没有正确的答案)。

接近可能包括f.ex.文本框中的水印(“不要键入,扫描!”或该顺序中的某些内容)。给它一个不同的颜色,边框,大小等,以区别于普通的文本框,并提供一个随时关联和提供的帮助文本,以提高清晰度。