获取连接到串行端口的条形码扫描器(通过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.文本框中的水印(“不要键入,扫描!”或该顺序中的某些内容).给它一个不同的颜色,边框,大小等,以区别于普通的文本框,并提供一个随时关联和提供的帮助文本,以提高清晰度.