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