Capturar entradas de teclado sem uma caixa de texto

Eu tenho um aplicativo que lê dados de cartões de saúde e analisá-los para informações básicas como D.O.B., número de cartão de saúde e nomes. No momento, eu tenho uma caixa de texto que recebe informações do swiper e funciona muito bem, mas acho que pode haver uma abordagem melhor para isso.

Eu quero ter um ouvinte de teclado no fundo do aplicativo que captura a entrada do cartão e analisar os dados sem a necessidade de uma caixa de texto. Eu imagino que precisarei de uma função de loop no Form1_Load que ouça ativamente entradas de teclado, prepare um buffer para a entrada e, quando um retorno de carro for detectado, vá em frente e analise os dados em buffer. Quando a análise estiver concluída, limpe o buffer.

Meu problema é que eu sou relativamente novo em C # e não sei o que devo usar para ouvir entradas de teclado sem uma caixa de texto. Alguém poderia me apontar na direção certa?

Aqui está o meu código no caso, se alguém estiver interessado:http://pastebin.com/q6AkghvN

Apenas uma nota, eu segui o guia de furto de cartão de crédito dehttp://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessing e modifiquei um pouco para o meu uso.

--- EDITADO ---

Obrigado Paul e todos os outros por sua ajuda!

Aqui está a minha solução, se alguém estiver interessado:

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

questionAnswers(1)

yourAnswerToTheQuestion