2011-01-18 3 views
0

키보드 이벤트를 운영 체제 (윈도우)에 주입해야합니다.Windows에서 키보드 이벤트로 RS232 입력 변환

전체적인 그림은 RS232 장치 (바코드 스캐너와 유사)를 "USB 키보드 에뮬레이트 장치"로 변환해야한다는 것입니다. rs232 장치를 제어하는 ​​백그라운드 응용 프로그램이 있으며 데이터를 수신하자마자 데이터를 활성 응용 프로그램 인 Point of Sale 응용 프로그램에서 수신 할 키보드 이벤트로 변환해야합니다.

나는 윈도우 후크를 사용하여 이벤트를 캡처하는 방법을 알고 있지만 새 이벤트를 시스템에 대기시킬 수 있는지 그리고 어떻게 수행 할 수 있는지는 잘 모르겠습니다.

아이디어가 있으십니까?

답변

0

이벤트로 직렬 포트 항목을 캡처하고 the SendKeys class 키를 다시 보내지 않는 이유는 무엇입니까? 드라이버 작성/테스트가 매우 복잡합니다 (버그가있는 드라이버가 BSOD를 닫을 수 있음) 어떤 언어로 테스트 할 계획입니까? 내가 제대로 질문을받을 경우

+0

자연 언어는 Java이지만 복잡하지 않은 통합없이 Windows에서 수행 할 수 있는지 확신하지 못했습니다. 네이티브 라이브러리. 다행히도 솔루션은 그리 어렵지 않습니다. java -Robot에 동등한 SendKeys가 있으며 직렬 드라이버는 이미 Java로 절반 정도 완성되었습니다. 마지막으로, 드라이버가 정상적으로 생성되도록 rs232 입력을 변환하고 Robot 클래스를 사용하여 키 이벤트를 활성 응용 프로그램에 보냅니다. 감사합니다 –

+1

관심있는 사람이 있다면 프로젝트의 다른 부분은 들어오는 메시지를 시작/중지하기 위해 키보드 이벤트를 연결하는 것입니다. 다시 말하지만 jintellitype 라이브러리를 사용하면 간단합니다. http://melloware.com/products/jintellitype/index.html –

1

, 당신이 여기 SendInput(...)에서보기를 할 수 있습니다 : 당신이 언어를 지정 didnt가 있기 때문에 http://msdn.microsoft.com/en-us/library/ms646310(v=vs.85).aspx

, 나는 C.

예를 가정 :

INPUT inp; 

    memset(&inp, 0, sizeof(INPUT)); 
    inp.type = INPUT_KEYBOARD; 
    inp.ki.wVk = VK_ESCAPE; 
    SendInput(1, &inp, sizeof(INPUT)); //send keyDown Event 
    inp.ki.dwFlags = KEYEVENTF_KEYUP; 
    SendInput(1, &inp, sizeof(INPUT)); //send KeyUp Event 
0

아마도 BlockInput/SendInput을 살펴 봐야 할 것입니다.

내 앱을 만든 후에 나온 것입니다. PostMessage를 사용하여 활성 창에 WM_KEYDOWN/WM_KEYUP 메시지를 게시합니다. 이것은 효과적이지만 다양한 문제가 있습니다. (예를 들어, 대문자로 키보드 시프트 상태를 설정해야합니다.) Thunderbird는 백 스페이스를 천천히 보내야합니다.)