Erfassen Sie Tastatureingaben ohne Textfeld

Ich habe eine Anwendung, die Daten von Gesundheitskarten liest und sie nach grundlegenden Informationen wie D.O.B., Gesundheitskartennummer und Namen durchsucht. Im Moment habe ich ein Textfeld, das Eingaben vom Kartenleser entgegennimmt, und es funktioniert hervorragend, aber ich glaube, es könnte einen besseren Ansatz dafür geben.

Ich möchte einen Tastatur-Listener im Hintergrund der Anwendung haben, der Eingaben vom Kartenleser erfasst und die Daten ohne Textfeld analysiert. Ich nehme an, ich brauche eine Schleifenfunktion in Form1_Load, die aktiv auf Tastatureingaben wartet, einen Puffer für die Eingabe vorbereitet und dann, wenn ein Wagenrücklauf erkannt wird, die gepufferten Daten analysiert. Wenn das Parsen abgeschlossen ist, löschen Sie den Puffer.

Mein Problem ist, dass ich relativ neu in C # bin und nicht weiß, was ich zum Abhören von Tastatureingaben ohne Textfeld verwenden soll. Könnte mich jemand in die richtige Richtung weisen?

Hier ist mein Code für den Fall, dass jemand daran interessiert ist:http://pastebin.com/q6AkghvN

Nur eine Notiz, ich folgte der Kreditkarten-Durchzugsanleitung vonhttp://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessing und modifizierte es leicht für meinen Usecase.

--- BEARBEITET ---

Vielen Dank an Paul und alle anderen für ihre Hilfe!

Hier ist meine Lösung, wenn jemand interessiert ist:

private void frmMain_KeyPress(object sender, KeyPressEventArgs e)
    {
        lblStatus.Text = "Reading Card...";
        lblStatus.ForeColor = Color.Blue;
        if (e.KeyChar != (char)Keys.Enter)
        {
            buffer += e.KeyChar;
        }
        else
        {
            lblStatus.Text = "Parsing Card...";
            if (buffer.Contains('^') && buffer.Contains(';') && buffer.Contains('='))
            {
                try
                {
                    string[] cardData = buffer.Split(';');
                    string[] caretData = cardData[0].Split('^');
                    string[] nameData = caretData[1].Split('/');
                    string[] equalData = cardData[1].Split('=');
                    tBoxHealthCardNumber.Text = equalData[0];
                    tBoxDateOfBirth.Text = FormatBirthday(equalData[1]);
                    tBoxFirstName.Text = TrimName(nameData[1]);
                    tBoxLastName.Text = TrimName(nameData[0]);
                    tBoxDateTimeScanned.Text = DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm");
                    e.Handled = true;
                }
                catch (Exception)
                {
                    throw;
                }
            }
            else
            {
                lblStatus.Text = "Error Reading Card";
            }

            buffer = "";
            lblStatus.Text = "Ready";
            lblStatus.ForeColor = Color.Green;
        }
    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage