KeyboardHook 관련 질문

안녕하세요? 이제 막 c#을 배우기 시작했습니다. c# winform 관련하여 인강 하나 정도 듣고 프로그램을 개발하려다보니 막히는 부분이 많은 것 같습니다. 해당 질문 관련해서 챗GPT한테도 질문해보고 여기저기 찾아봤는데, 정확한 답을 얻지 못해서 질문드립니다.

바코드 리더기로 바코드(code 128)를 읽을 시, textbox1에 해당 바코드를 text로 나타내고, 그 바코드에 해당하는 데이터를 sqlserver로부터 받아와서 datagridview로 데이터 테이블을 보여주는 (즉, 바코드 데이터 이력 조회 프로그램) 프로그램B을 개발하고 있습니다.

질문 :
만들고자하는 프로그램B 개발 전, 먼저 간단하게 키보드훅을 이용해서, textbox1에 리더기로 읽은 바코드를 textbox1에 text로 나타내고, 그리고 다음 바코드를 읽으면, textbox1에 다시 다음 바코드가 text로 나타나는 프로그램A를 짜봤습니다. 아래 그에 관련한 코드를 첨부 드려요.
image

여기서 문제는, 제가 진짜로 만들고자하는 프로그램B(키보드 훅 이외에, sql-server로부터 데이터를 불러온다던가 등 이것저것 기능이 다 섞여있는…)에 똑같이 코드를 적용 하였을 때, 기본 셋은 똑같이 구성을 해놓았는데 실행되는 결과가 다릅니다. 프로그램B에서는 바코드 리더기로 바코드를 읽자마자 textbox1에 나타나는 text가 나타났다 바로 (거의 0.3초…) 사라집니다.

추가적으로, 'Barcode-2222’이란 바코드(code128)을 바코드 리더기로 찍었을 때, 프로그램A에서는 'BARCODE1/22222’이라는 text가 뜨고, 프로그램B에서는 'emMinus11111’이라는 text가 뜹니다…
image
image

왜 똑같은 코드를 사용했는데도 다른 결과 값이 나오는걸까요?

감사합니다…!

2개의 좋아요

밑에 emMinus 이렇게 나오는건 직접 키 입력하신건 아니예요?
e.KeyCode.ToString()하면 문자가 아니라 열거형 이름이 문자열로 변경될텐데요ㅎㅎ

3개의 좋아요

그런데 궁금한게 있습니다! 바코드 리더기를 사용할 때 후킹을 꼭 써야하나요?
프로그램이 활성화 안되어도 입력이 되어야 하는거예요?

4개의 좋아요

stevemesser/rawinput: Using Raw Input from C# to handle multiple keyboards (github.com)

1개의 좋아요

제가 사용했던 바코드 리더기는 USB 연결을 통해서, 특별한 프로그램을 사용하지 않아도 바코드 리딩이 가능했습니다.

예를 들어, 메모장을 켜놓고 바코드를 찍으면 해당 바코드 내용이 메모장에 입력되는 것 처럼요!

그래서 바코드 리딩을 위해 왜 꼭 후킹까지 쓰셔야하는지 궁금했었습니다

3개의 좋아요

너무 어렵게 생각하신 것 같은데요.
테스트하고 계시는 바코드 종류가 무엇인지는 모르겠지만,
RS-232 방식과 USB-To-Serial 컨버터 처럼 동작하는 타입은
컴포트를 통해서 그냥 읽으면 됩니다.
USB 타입 중 키보드 처럼 동작 해서 textbox에서 데이터 써지는 경우에는
textbox의 이벤트를 이용하면 쉽게 읽을 수 있을 겁니다.

6개의 좋아요

키보드훅을 사용한 이유는 '키보드훅’을 사용해서 과제를 진행 해 보라고 전달 받아서 그랬습니다…!ㅎㅎ 말씀 주신대로, 키보드훅을 사용하지 않고 프로그램 개발을 완료 했습니다. 감사합니다.

그런데, 혹시 왜 다른 프로그램에 같은 코드를 사용하면 다른 결과값이 나오는 건지 알 수 있을까요?

1개의 좋아요