0

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

4

1 回答 1

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。文本框中的水印(“不要输入,扫描!”或按此顺序排列的内容)。给它一个不同的颜色、边框、大小等,以将它与普通文本框区分开来,并有一个相关的帮助文本并随时可用,以提高清晰度。

于 2013-01-05T10:42:07.210 回答