VB 6 与 USB接口的扫描枪

我想强制用户扫描枪输入信息,不可以用键盘输入,主要目的是为了防止手动输入可能会输错.
我设想了一下,不用文本框,而是用label,但具体如何用vb6实现,我不知道,有知道的请赐教!谢谢!
扫描枪是USB接口的.

扫描枪的原理和键盘是差不多的,扫描条码后它会自动转换为数字然后模拟通过键盘端口发送到电脑中,就像是人手从键盘中键入这些数字一样。所以对于VB而言,它是无法判断这些数字是通过扫描枪发来还是通过真正的键盘发来的,因此如果把接收的文本框设为只读或锁定,那么就会连扫描枪发来的信息也一起拒之门外的。改用Label也不行,因为它没有键盘事件。
这件事的完美解决方法要在扫描枪上找。扫描枪的说明书应该有说明如何自定义数字输出格式的(我用过的就有),你可以在数字前面添加一个特殊的字符,比如~,使数字传送到电脑后变成类似下面的格式:
~1234567890(后面加个回车键)
这样你在文本框的KeyPress事件中先检测是否是~字符,如果不是就拒绝接收,如果是就继续接收直到回车键。

不过,你最好还是允许手工收入为好,扫描枪的设计原理本身就是为了自动输入与手工输入相结合的,否则一旦扫描枪发生故障,连个应急措施度没有。你可以在程序中对输入结果进行检测,比如长度、是否合法字符等,另外一般条形码中都包含校验码的,通过比对校验码和其他数字,可知道是否有错。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-16
vb6比较常用的是mscomm控件对serial信号的接收,USB的得调到相应的控件或者扫描枪给的驱动里看看
第2个回答  2012-03-16
你把那个文本框的enabled设置为False,这样就无法输入了,不会影响程序运行。追问

我试过了,这样之后,扫描枪也不能输入了.
我想要的是键盘不能输入,扫描枪能输入.

追答

做一个实验:

Private Sub Command1_Click()
Text1.Text = "123"
End Sub

Private Sub Form_Load()
Text1.Enabled = False
End Sub

你会发现在enabled属性为False的情况下,无法输入,但是可以用代码改变

追问

怎么实现下面的代码:
Private Sub 扫描枪扫描()
Text1.Text = 扫描枪扫描的内容
End Sub

追答

扫描枪扫描的内容和Text1没什么关系吧,你给出的代码发生什么错误了?

追问

Private Sub 扫描枪扫描()
Text1.Text = 扫描枪扫描的内容
End Sub
======================
如何用vb的语言写 "扫描枪扫描()" ,换句话说,这是个什么事件?
如何用vb的语言写 "扫描枪扫描的内容" ,换句话说,这是个什么属性?

追答

这个你要自己研究了,我没用过扫描枪,估计是通过串口通讯的方法获取扫描的信息

本回答被网友采纳
第3个回答  2012-03-16
扫描枪并不需要用什么mscomm控件。它就象键盘一样的。你扫描条码后它直接把得到的一串数字输入到可以输入的文本框里。楼上两位说的设置locked和enabled属性都可以实现你的要求。追问

我试过了,这样之后,扫描枪也不能输入了.
我想要的是键盘不能输入,扫描枪能输入.

第4个回答  2012-03-29
在Text1_KeyUp事件里将text内容清空,这样就键盘就输不了了,但还可以接收扫描枪输入:
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Text1.Text = ""
End Sub
相似回答