Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
794 views
in Technique[技术] by (71.8m points)

c# - Reading a barcode using a USB barcode scanner along with ignoring keyboard data input while scanner product id and vendor id are not known

Is there a way to read from a USB barcode reader while ignoring the keyboard and not knowing the PID or VID of the USB scanner? I know that there is a way of differentiating between USB scanner input and keyboard input by using the VID and or PID of the USB scanner; this was done using code from http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/ But is there another solution to differentiate between keyboard and USB scanner without putting the scanner's VID or PID in a configuration file (or source code)? The reason for not wanting to put various VIDs or PIDs in a configuration file is that, the application being developed will be deployed on numerous laptops and have arbitrary types of scanners attached to them.

Also, I don't want to configure the scanner's with a starting and or ending sequence that would be outputted, since the scanner is being used by other software on the same machine as well and I don't want to have to change the code on the other software. I don't want to program the barcode reader to be in serial mode either for the same reason mentioned previously.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

There is a way to differentiate between keyboard and USB barcode reader


Starting with the following assumptions:

  1. the code scanned by barcode reader will be at least 4 characters long
  2. the code scanned by barcode reader ends with an "ENTER" keypress
  3. it take less than 50 ms to transmit the entire barcode

This simple form using VS2005 VB contains:

  1. TextBox1
  2. TextBox2
  3. TextBox3
  4. Button1
  5. Timer1 "the time interval set to 50ms"

Public Class Form1

Dim BarcodeStr As String = ""
Dim IsBarcodeTaken As Boolean = False
Dim Str As String = ""
Dim str3 As String = ""


Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

    If Timer1.Enabled = False Then
        Str = TextBox1.Text
        str3 = TextBox3.Text
    End If

End Sub

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
    If Timer1.Enabled = False Then
        Timer1.Enabled = True
    End If


    BarcodeStr = BarcodeStr & e.KeyChar
    If Asc(e.KeyChar) = 13 And Len(BarcodeStr) >= 4 Then
        IsBarcodeTaken = True
        TextBox2.Text = BarcodeStr


    End If

End Sub
Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    If IsBarcodeTaken = True Then
        TextBox1.Text = Str
        TextBox1.Select(Len(TextBox1.Text), 0)
        Str = ""

        TextBox3.Text = str3
        TextBox3.Select(Len(TextBox3.Text), 0)
        str3 = ""
    End If

End Sub


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    BarcodeStr = ""
    IsBarcodeTaken = False
    Timer1.Enabled = False
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    TextBox2.Text = ""

End Sub

End Class

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...