Lesen eines Barcode einen USB-Barcode-Scanner zusammen mit ignorierend Tastatur Dateneingabe verwenden, während Scanner Produkt-ID und Vendor-ID nicht bekannt sind

StackOverflow https://stackoverflow.com/questions/615036

  •  03-07-2019
  •  | 
  •  

Frage

Gibt es eine Möglichkeit von einem USB-Barcode-Lesern zu lesen, während der Tastatur zu ignorieren und nicht die PID oder VID der USB-Scanner zu kennen? Ich weiß, dass es ein Weg zwischen USB-Scanner-Eingang und Tastatureingabe zur Differenzierung durch die VID und PID oder den USB-Scanner; dies wurde mit Code getan von http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/ Aber gibt es eine andere Lösung zwischen Tastatur und USB-Scanner zu unterscheiden, ohne den Scanner des VID oder PID in einer Konfigurationsdatei (oder Quellcode) zu setzen? Der Grund für die nicht verschiedene SIV oder PIDs in einer Konfigurationsdatei setzen zu wollen, dass die Anwendung entwickelt wird auf zahlreiche Laptops und hat beliebige Arten von ihnen angeschlossenen Scanner eingesetzt werden.

Auch ich möchte nicht, die Scanner mit einem Start zu konfigurieren und zu oder Sequenz endet, die ausgegeben werden würde, da der Scanner als auch von anderer Software auf der gleichen Maschine verwendet wird, und ich will nicht zu haben, ändern Sie den Code auf der anderen Software. Ich möchte nicht den Barcodeleser programmieren im seriellen Modus entweder aus dem gleichen Grunde bereits erwähnt.

War es hilfreich?

Lösung

Es gibt einen Weg zwischen Tastatur und USB-Barcode-Lesern zu unterscheiden

Sie können auf diesen Fakten abhängen:

  1. der durch Barcode-Leser gescannt Code in minmum 4 Zeichen
  2. der Code durch Barcode-Leser gescannt endet mit RETURN "ENTER"
  3. Sie nehmen weniger als 50 mseconds das Loch Barcode zu scannen

Dies ist eine einfache Form mit VS2005 VB enthält:

  1. textbox1
  2. TextBox2
  3. TextBox3
  4. Button1
  5. Timer1 "das Zeitintervall auf 50" ms "

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

Andere Tipps

Nun, ich bin eine Lösung ziemlich wie die von Ehab mit - ich nur den Code ein wenig für meine Anwendung gereinigt. Ich verwende eine benutzerdefinierte Klasse für meine Edit-Steuerelemente (es einige andere Dinge tut) - aber das sind die wichtigen Teile für diese: #

    public class ScannerTextBox : TextBox
    {
        public bool BarcodeOnly { get; set; }

        Timer timer;

        private void InitializeComponent()
        {
            this.SuspendLayout();

            this.ResumeLayout(false);
        }

        void timer_Tick(object sender, EventArgs e)
        {
            if (BarcodeOnly == true)
            {
                Text = "";
            }

            timer.Enabled = false;
        }


        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            base.OnKeyPress(e);

            if (BarcodeOnly == true)
            {
                if (timer == null)
                {
                    timer = new Timer();
                    timer.Interval = 200;
                    timer.Tick += new EventHandler(timer_Tick);
                    timer.Enabled = false;
                }
                timer.Enabled = true;
            }

            if (e.KeyChar == '\r')
            {
                if (BarcodeOnly == true && timer != null)
                {
                    timer.Enabled = false;
                }
            }
        }
    }

Es ist eine andere Frage über Barcodes hier , der Link gelangen Sie auf eine Antwort senden, die den Barcode über eine serielle Schnittstelle verwendet. Vielleicht ist das eine Lösung für Sie?

IMHO: Die einfachste Lösung wird die Eingabe von der Tastatur zu akzeptieren

.

Vielleicht ist dies eine stark vereinfachte Lösung, aber könnten Sie den Schlüssel presss Ereignis erfassen und einfach Eingabe über Tastatur verhindern?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top