0

텍스트 상자가있는 Windows Form 응용 프로그램을 만들었습니다. 나는 사용자가 바코드 스캐너를 사용하도록 강요 할 것이므로 키보드 입력을 비활성화해야한다. 바코드 스캐너에서 입력을 사용할 수 없으므로 KeyPressed 이벤트가 작동하지 않습니다.Texbox 입력, 키보드 비활성화, 바코드 스캐너 유지

아마 TextChanged 이벤트에 타이머를 설정할 수 있다고 생각했지만 어떻게 작동하는지 실제로 알지 못합니다.

누군가에게 좋은 생각이 있습니까?

+0

텍스트 상자의 enabled 속성을 false로 설정 한 다음 바코드 스캐너의 API를 사용하여 스캔 이벤트에 연결하고 해당 스캔 결과에 텍스트 상자 값을 설정할 수 있습니다. –

+1

희망이 있습니다. http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/ – Steve

답변

2

설명에 따르면 바코드 스캐너가 HID 바코드 스캐너라고 가정합니다. 그렇다면 바코드 스캐너가 키보드와 똑같이 기능하기 때문에 쉬운 대답은 없습니다. 키보드 입력을 비활성화하면 바코드 스캐너가 비활성화됩니다.

내가 전에 이런 짓을했는지, 내가 알고있는 몇 가지 해결책이 있습니다 : HID 바코드 스캐너가 아닌 바코드 스캐너를 사용

  1. 은. 예 : 시리얼 등.
  2. 바코드 스캐너가 바코드 스캔의 시작과 끝 부분에 특수 문자를 보내도록 구성합니다. (이것은 바코드 스캐너의 특정 모델에 대한 설명서가있는 경우 할 수 있습니다.) 바코드 스캐너에서 데이터를 가져 오는 신호로 이러한 특수 문자를 수신하는 KeyPressed 이벤트를 작성하십시오. 표시되면 텍스트 상자를 사용하거나 사용하지 않도록 설정합니다.
  3. Windows API 호출을 사용하여 바코드 스캐너와 직접 통신합니다. 이를 위해서는 바코드 스캐너의 VID 및 PID, GetRawInputDeviceInfo, GetRawInputData 및 RegisterRawInputDevices와 같은 API에 대한 자세한 지식이 필요합니다. 애플리케이션의 어느 위치에서나 바코드 입력을받을 수 있기 때문에 매우 강력하지만 매우 복잡합니다.

그러나주의 할 점은 텍스트 상자를 사용하지 않는 것이 좋습니다. 바코드가 손상되어 스캐너가 읽을 수 없으면 어떻게해야합니까? 항상 바코드를 수동으로 입력 할 수 있어야합니다. 다음에 상점에서 금전 등록기를 통과 할 때 수동으로 바코드를 입력하는 방법이 항상 있음을 알아 두십시오.

+0

다른 바코드 스캐너는 옵션이 아닙니다. 타이머 같은 것이 가능합니까? 바코드 스캐너의 입력은 사람의 입력보다 훨씬 빠릅니다. – Marten

+1

바코드 스캐너와 사람에 따라 다릅니다. 저는 느린 바코드 스캐너와 빠른 인간을 보았습니다. 타이밍 기반 솔루션을 사용하지 않는 것이 좋습니다. 궁극적으로 근본적인 문제는 바코드 스캐너 인터페이스가 빨려 있다는 것입니다. 그들은 키보드 인 것처럼 가장하며, 액세스에 유용한 API를 제공하지 않습니다. –