2012-03-14 3 views
5

RIDEV_INPUTSINK 플래그를 사용하여 원시 입력에 대해 자체 등록하는 메시지 전용 창 (ATL :: CWindowImpl)이 있습니다. 즉, 창이 전경 창인지 여부에 관계없이 모든 입력을받습니다. 이 창의 인스턴스가 하나 뿐인 경우에 효과적입니다.여러 개의 Raw 입력 창 싱크

그러나 내 창 인스턴스가 두 개 이상 생성되면 하나만 WM_INPUT 메시지를 수신합니다 (현재 두 개를 만들고 두 번째 메시지 만 만들어집니다).

RegisterRawInputDevices (RIDEV_INPUTSINK | RIDEV_NOLEGACY 사용)는 두 창의 생성 중에 성공합니다. 또한 원시 입력을 수신하지 않는 윈도우는 여전히 다른 메시지를 수신하므로 윈도우 자체에는 문제가 없습니다. ...

관련성이있는 경우 VC11 베타를 사용하며 창을 만들고 메시지를 발송합니다. 다른 스레드 (std :: thread 사용).

이것은 API 제한 사항입니까? 즉 프로세스 당 입력 싱크가 1 개로 제한되어 있습니까? 또는이 방법을 사용할 수있는 방법이 있습니까?

미리 감사드립니다.

편집 :

지금 내 현재 해결 방법은 단지 하나 개의 창을 가지고 있고 그것이 다른 창에 입력 메시지를 전달하는, 그러나이 엉망이고, 경우에 작동하지 않습니다 I (내가 실제 입력을 원할 수있는 플러그인을 로딩하는 내 앱이있는 곳에서, 정말로 그렇게하지 않으면 내 앱에 등록 할 필요가 없다.).

+3

이것은 최악의 사태입니다. –

+1

IIRC를 처리하는 경우 권장되는 방법은 하나의 창에서 원시 입력을 수신 한 다음 다른 관심있는 창에 이벤트를 생성하는 것입니다. 즉, 그것은 당신이 원하는 것을하지 않을 것입니다 : – JimR

+0

[문서]에 따라 큰 질문, (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645565 (v = vs.85) .aspx) :'hwndTarget'을 올바르게 설정 했습니까? – MrGomez

답변

5

MSDN (herehere)에서 원시 입력에 대한 전체 API는 항상 응용 프로그램에 관한 것이지 창에 관한 것이 아닙니다 ... 이는 원시 입력을 등록하는 응용 프로그램이 OS에 의해 하나의 자격으로 평가된다는 것을 의미합니다. 당신은 간접적으로 두 번째받는 winow를 등록함으로써 간접적으로 증명했습니다. OS가 원시 입력을 응용 프로그램에 전달하기 때문에 수신을 중단 한 첫 번째 수신자입니다 (싱크와 정확히 일치하는 창으로 표시됨).