Windows의 태블릿/마우스 이벤트에 대한 정확한 응답
문제
태블릿 펜 이벤트에서 도움이되지 않는 사전 처리를하지 말라고 Windows에게 어떻게 말할 수 있습니까?
Python 2.6에서 프로그래밍하여 Windows 7을 실행하는 태블릿 PC를 대상으로합니다 (스마트 인터랙티브 화이트 보드와 Linux/Mac의 마우스 사용자를 사용하여 XP에서 거의 수정하지 않기를 원합니다. 나는 일반적인 Windows 마우스 이벤트, wm_mousemove 등에 연결하는 프로그램을 작성하고 캔버스에 씁니다.
문제는 마우스 메시지가 내 응용 프로그램에 도달하기 전에 충격을 받고 있다는 것입니다. 긴 스트로크를 만들고 뇌졸중 사이에 일시 중지하면 마우스 메시지가 제대로 전송된다는 것을 알았습니다. 그러나 몇 번의 빠른 짧은 스트로크를한다면, 무언가가 도움이되지 않는 사전 프로세싱을하고 있습니다. 구체적으로, 약 10 픽셀 길이의 다운 스트로크를 만들고 첫 번째 오른쪽에 5 개의 픽셀에 대해 다른 다운 스트로크를 만들면 두 번째 WM_Mousedown은 첫 번째와 정확히 같은 장소에서 나온다고보고합니다.
이것은 일종의 사전 프로세싱처럼 보이므로 순진한 응용 프로그램이 두 번 클릭에 대해 혼란스러워지지 않습니다. 그러나 빠른 제스처에 대한 매우 충실한 반응을 원하는 내 응용 프로그램의 경우 도움이되지 않습니다.
MicrosoftTableTpenserviceProperty Atom과 CS_DBLCKS Window 스타일에 대한 참조를 찾았고 다음과 같은 Python 코드로 둘 다 꺼 냈습니다.
hwnd = self.GetHandle()
tablet_atom = "MicrosoftTabletPenServiceProperty"
atom_ID = windll.kernel32.GlobalAddAtomA(tablet_atom)
windll.user32.SetPropA(hwnd,tablet_atom,1)
currentstyle = windll.user32.GetClassLongA(hwnd, win32con.GCL_STYLE)
windll.user32.SetClassLongA(hwnd, win32con.GCL_STYLE, currentstyle & ~win32con.CS_DBLCLKS)
그러나 그것은 효과가 없습니다.
Setwindowshookex를 사용하여 마우스 드라이버에 대한 낮은 수준의 후크를 작성하려고 시도했지만 작동하지 않습니다. 분명히 마우스 메시지가 저수준 Windows 후크로 전송되기 전에 사전 처리되고 있습니다.
이 사전 프로세싱을 끄는 방법에 대한 조언에 감사드립니다. Windows XP Plus Smart Interactive Whiteboard에서 작동하지 않기 때문에 RealTimestyLus로 전환하고 싶지 않습니다. CPYTHON에서 RealTimestyLus를 사용하는 방법을 알 수 없으므로 Ironpython으로 전환해야합니다. 내 코드는 더 이상 Linux/Mac에서 실행되지 않습니다.
데이먼.
해결책
원시 마우스 메시지의 경우 사용할 수 있습니다 WM_INPUT
XP와 나중에. 7 개는 약간의 터치 특정 물건을 추가했습니다. WM_GESTURE
그리고 WM_TOUCH