2009-09-29 7 views
0

타블렛 펜 이벤트에서 도움이되지 않는 전처리를하지 않도록 Windows에 지시하려면 어떻게해야합니까?Windows의 타블렛/마우스 이벤트에 대한 정확한 응답

필자는 Python 2.6에서 프로그래밍 중이며 Windows 7을 실행하는 타블렛 PC를 대상으로합니다 (필자의 프로그램은 스마트 인터랙티브 화이트 보드가있는 XP에서 약간의 수정 작업을하고 Linux/Mac에서는 마우스 사용자 용). 나는 일반적인 윈도우 마우스 이벤트, WM_MOUSEMOVE 등을 연결하고 캔버스에 글을 쓰는 프로그램을 작성했다.

문제는 응용 프로그램에 도달하기 전에 마우스 메시지가 들썩이는 것입니다. 나는 긴 스트로크를하고 스트로크 사이에서 멈 추면 마우스 메시지가 제대로 보내지는 것을 발견했습니다. 그러나 몇 가지 빠른 짧은 스트로크를 만들면 도움이되지 않는 사전 처리가 이루어지고 있습니다. 특히, 약 10 픽셀 길이의 다운 스트로크를 만든 다음 첫 번째 오른쪽의 다섯 픽셀 정도 다른 하향 스트로크를하면 두 번째 WM_MOUSEDOWN은 첫 번째 것과 정확히 같은 위치에서 나온 것으로보고합니다.

이것은 일종의 사전 처리처럼 보입니다. 따라서 순진한 응용 프로그램이 두 번 클릭에 대해 혼동하지 않도록 할 수 있습니다. 그러나 신속한 제스처에 대한 충실한 대응을 원할 경우, 도움이되지 않습니다.

은 내가 MicrosoftTabletPenServiceProperty 원자에 대한 참조를 발견하고, CS_DBLCLKS 창 스타일에, 나는 파이썬 코드의 다음 조각 떨어져 둘 다 설정 :

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 훅으로 보내지기 전에 미리 처리되는 것은 분명합니다.

이 사전 처리를 해제하는 방법에 대한 조언을 드리며 매우 감사하게 생각합니다. RealTimeStylus로 전환하고 싶지 않습니다. Windows XP와 SMART 인터랙티브 화이트 보드에서는 작동하지 않기 때문에 먼저 CPython에서 RealTimeStylus를 사용하는 방법을 볼 수 없기 때문에 두 번째로 IronPython으로 전환해야합니다. 내 코드가 Linux/Mac에서 더 이상 실행되지 않습니다.

Damon.

+0

나는 그 대답에 대해 잘 모르겠지만, Windows-7과 같은 태그를 제안하거나 더 적절하다고 생각합니다. RealTimeStylus에 대한 파이썬 인터페이스를 찾는 것 외에는 많은 파이썬이 포함됩니다. 더 많은 사람들이 30 개가 넘는 문장을 읽으므로이 파이썬 부분을 별도의 질문으로 분해하려고 할 수도 있습니다. (비록 내가 틀렸을 지 모르니 자신 만의 정보에 입각 한 선택을하십시오.) – tom10

+0

더블 클릭을 필터링하는 것은 의미가 없습니다 - 앱은 더블 클릭을 감지하기 위해 여러 MOUSEDOWN 이벤트를 검사하지 않습니다. 그게 WM_LBUTTONDBLCLK 등입니다. 나는 무슨 일이 일어날지는 모르지만, 진단을 위해서 나는 이것이 마우스로 일어나는 지 보는 것이 좋습니다. 그것을 XP에서 일어나는보십시오; WM_MOUSEMOVE 이벤트와 WM_MOUSEDOWN 이벤트를 기록하고 눈에 띄는 것이 있는지 확인하십시오. Win7의 스크램블되고 쓸모없는 컨트롤 패널의 어딘가에서 XP의 "포인터 정밀도 향상"과 유사한 것이 있는지 확인하십시오. –

답변

1

원시 마우스 메시지의 경우 XP 이상에서는 WM_INPUT을 사용할 수 있습니다. 일곱 가지 터치 특정 물건을 추가했습니다 : WM_GESTUREWM_TOUCH

+0

이것은 정확히 내가 찾고있는 것입니다. 고맙습니다. – DamonJW

관련 문제