다중 키보드 및 저수준 후크
문제
여러 개의 키보드가 있는 시스템이 있는데 어떤 키보드에서 키 입력이 나오는지 알아야 합니다.설정을 설명하려면 다음을 수행하세요.
- 일반 PC와 USB 키보드가 있습니다
- 일부 하드 키가 있는 외부 VGA 화면이 있습니다.
- 하드 키는 표준 USB 키보드로 매핑되어 제한된 수의 키 코드(F1, F2, Return, + 및 -)를 전송합니다.
내 응용 프로그램에 포커스가 없을 때에도 입력을 처리할 수 있는 낮은 수준의 후크(C#에서는 실제로 Win32 기능을 호출)가 있습니다.
문제는 일반 키보드를 사용할 때 매핑된 키 코드 중 일부가 외부 화면에서 구동되는 애플리케이션에 의해 선택된다는 것입니다.외부 화면에서 전송되고 확인에 사용되는 키 누르기 중 하나는 VK_RETURN입니다."장치"를 식별하고 이를 필터링할 수 없다면 사용자는 보지 않고도 화면에서 작업을 수행하고 이를 확인할 수 있습니다.
키 누름을 담당하는 키보드가 무엇인지 어떻게 알 수 있습니까?
해결책
예, 저는 교정을 받았고, 나쁘고 매일 새로운 것을 배우고 있습니다.
이를 보완하려는 나의 시도는 다음과 같습니다 :) :
::RegisterRawInputDevices()를 사용하여 원시 입력(2개의 키보드)에 사용하려는 장치를 등록합니다.
GetRawInputDeviceList()에서 이러한 장치를 가져올 수 있습니다.
장치를 등록하고 나면 WM_INPUT 메시지를 받기 시작합니다.
WM_INPUT 메시지의 lParam에는 입력이 발생한 키보드와 가상 키코드 및 메시지 유형(WM_KEYDOWN, WM_KEYUP, ...)을 결정하는 데 사용할 수 있는 RAWKEYBOARD 구조가 포함되어 있습니다.
따라서 마지막 메시지가 어디서 왔는지에 대한 플래그를 설정한 다음 이를 일반 키보드 입력 핸들러에 전달할 수 있습니다.
다른 팁
이렇게 할 방법이 없습니다.Windows에서는 이를 추상화합니다.언급한 대로 장치 드라이버를 작성/수정해야 합니다.