Captura entradas de teclado sin un cuadro de texto

Tengo una aplicación que lee datos de tarjetas de salud y los analizo para obtener información básica como D.O.B., Número de tarjeta de salud y nombres. En este momento, tengo un cuadro de texto que recibe información del swiper de la tarjeta y funciona bien, pero creo que podría haber un mejor enfoque para esto.

Quiero tener un detector de teclado en el fondo de la aplicación que captura la entrada del swiper de la tarjeta y analizar los datos sin la necesidad de un cuadro de texto. Creo que necesitaré una función de bucle en Form1_Load que escuche activamente las entradas del teclado, prepare un búfer para la entrada y luego, cuando se detecte un retorno de carro, siga adelante y analice los datos almacenados en búfer. Cuando se realiza el análisis, borre el búfer.

Mi problema es que soy relativamente nuevo en C # y no sé qué debo usar para escuchar las entradas del teclado sin un cuadro de texto. ¿Podría alguien apuntarme en la dirección correcta?

Aquí está mi código en caso de que si alguien está interesado:http://pastebin.com/q6AkghvN

Solo una nota, seguí la guía de deslizar tarjetas de crédito dehttp://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessing y lo modifiqué ligeramente para mi caso de uso.

--- EDITADO ---

Gracias Paul y todos los demás por su ayuda!

Aquí está mi solución si alguien está interesado:

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;
        }
    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta