Przechwyć dane z klawiatury bez pola tekstowego
Mam aplikację, która odczytuje dane z kart zdrowia i analizuje je pod kątem podstawowych informacji, takich jak D.O.B., Karta zdrowia # i nazwy. W tej chwili mam pole tekstowe, które pobiera dane z czytnika kart i działa świetnie, ale wydaje mi się, że może być lepsze podejście do tego.
Chcę, aby w tle aplikacji znajdował się słuchacz klawiatury, który przechwytuje dane wejściowe z czytnika kart i analizuje dane bez potrzeby pola tekstowego. Uważam, że będę potrzebował funkcji pętli w formularzu Form1_Load, który aktywnie nasłuchuje danych wprowadzanych z klawiatury, przygotowuje bufor dla danych wejściowych, a następnie po wykryciu powrotu karetki kontynuuje i analizuje buforowane dane. Po zakończeniu analizowania wyczyść bufor.
Mój problem polega na tym, że jestem stosunkowo nowy w C # i nie wiem, co powinienem używać do słuchania wejść klawiatury bez pola tekstowego. Czy ktoś mógłby wskazać mi właściwy kierunek?
Oto mój kod na wypadek, gdyby ktoś był zainteresowany:http://pastebin.com/q6AkghvN
Tylko uwaga, podążałem za przewodnikiem po karcie kredytowejhttp://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessing i zmodyfikowałem go nieco dla mojej skrzynki.
--- EDYCJA ---
Dziękuję Paulowi i wszystkim innym za ich pomoc!
Oto moje rozwiązanie, jeśli ktoś jest zainteresowany:
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;
}
}