건강 카드에서 데이터를 읽고 D.O.B., Health Card # 및 이름과 같은 기본 정보를 위해 구문 분석하는 응용 프로그램이 있습니다. 지금 당장 카드 스와 이퍼에서 입력을받는 텍스트 상자가 있는데 잘 작동하지만 더 나은 접근 방법이 될 수 있다고 생각합니다.텍스트 상자없이 키보드 입력을 캡처하십시오.
카드 스 와이퍼에서 입력을 캡처하고 텍스트 상자없이 데이터를 구문 분석하는 응용 프로그램 배경에 키보드 수신기가 있어야합니다. 필자는 Form1_Load에서 키보드 입력을 적극적으로 듣고 입력 버퍼를 준비한 후 캐리지 리턴이 감지되면 버퍼링 된 데이터를 구문 분석하는 루프 함수가 필요합니다. 구문 분석이 완료되면 버퍼를 지우십시오.
제 문제는 비교적 C#에 익숙하지 않아서 텍스트 입력없이 키보드 입력을 듣기 위해 무엇을 사용해야하는지 잘 모르겠습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있을까요? 사람이 관심이 있다면
여기 경우 내 코드입니다 :
그냥 메모 http://pastebin.com/q6AkghvN, 나는 http://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessing에서 신용 카드 슬쩍 가이드를 따라 내 유스 케이스에 대한 약간 수정했습니다.
--- 수정 됨 ---
덕분에 바울과 자신의 도움을 다른 사람! 당신이 폼에 키 핸들러를 추가하면 초점 제어에있을 때
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;
}
}
양식의 keyup 이벤트가 스 와이프를 감지하지만 시도 할 수 있는지 확실하지 않습니다. – AbZy
카드 판독기가 실제로 데이터를 가로지를 때 어떤 점에서 코드를보고 있습니까? –
@ Shane.C 내 이해에서 많은 카드 판독기는 키보드의 역할을합니다. 마치 키보드로 입력 한 것처럼 데이터를 전송합니다. 나는 바코드 스캐너가 이런 식으로 작동하는 경향이 있다고 생각한다. –