2013-01-17 5 views
2

건강 카드에서 데이터를 읽고 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; 
     } 
    } 
+0

양식의 keyup 이벤트가 스 와이프를 감지하지만 시도 할 수 있는지 확실하지 않습니다. – AbZy

+0

카드 판독기가 실제로 데이터를 가로지를 때 어떤 점에서 코드를보고 있습니까? –

+0

@ Shane.C 내 이해에서 많은 카드 판독기는 키보드의 역할을합니다. 마치 키보드로 입력 한 것처럼 데이터를 전송합니다. 나는 바코드 스캐너가 이런 식으로 작동하는 경향이 있다고 생각한다. –

답변

3

당신은 키 입력을 볼 수 없습니다 예를 들면 : 사람이 관심이 있다면 여기에

내 솔루션입니다 텍스트 상자 포커스가있는 컨트롤이있는 경우에도 양식에서 키 누름을 보려면 KeyPreview 속성을 활성화해야합니다.

그런 다음이 이벤트를 받기 위해 양식에 KeyDown, KeyPress 및/또는 KeyUp에 대한 처리기를 추가 할 수 있습니다.

문서에서 KeyPreview을 읽을 수 있으므로 Handled 속성을 true로 설정하면 이벤트가 포커스가있는 컨트롤로 전송되는 것을 방지 할 수 있습니다. 즉, 포커스가있는 특정 키 이벤트가 보이지 않도록 숨길 수 있습니다 제어.

+0

더 나은 방법은 응용 프로그램이 위에 있지 않을 때에도 캡처하고 출력 할 수 있도록 Keydown 및 Keyup에 대한 Windows 이벤트를 캡처하는 것입니다. – CodingBarfield

+0

감사! 그게 내가 찾는 대답 일거야. – Craig