Точная реакция на события планшета / мыши в Windows

Как я могу сказать Windows, чтобы он не делал бесполезную предварительную обработку событий планшета?

Я программирую на Python 2.6, ориентируясь на планшетные ПК под управлением Windows 7 (хотя я хотел бы, чтобы моя программа работала с небольшими изменениями на XP с интерактивной доской SMART и для пользователей мыши на Linux/Mac). Я написал программу, которая подключается к обычным событиям мыши в Windows, WM_MOUSEMOVE и т. Д. И пишет на холсте.

Проблема в том, что с сообщениями мыши манипулируют до того, как они достигают моего приложения. Я обнаружил, что если я делаю длинные удары и делаю паузу между ударами, то сообщения мыши отправляются правильно. Но если я делаю несколько быстрых коротких ударов, то что-то делает бесполезную предварительную обработку. В частности, если я делаю обводку длиной около 10 пикселей, а затем совершаю еще одно понижение примерно на пять пикселей вправо от первого, то второй WM_MOUSEDOWN сообщает, что он идет точно из того же места, что и первый.

Это похоже на некоторую предварительную обработку, возможно, чтобы наивные приложения не запутались в двойном щелчке. Но для моего приложения, где я хочу очень точный ответ на быстрые жесты, это бесполезно.

Я нашел ссылку на атом MicrosoftTabletPenServiceProperty и стиль окна CS_DBLCLKS, и я отключил их оба с помощью следующего фрагмента кода 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.

Буду очень признателен за совет, как отключить эту предварительную обработку. Я не хочу переключаться на RealTimeStylus - во-первых, потому что он не будет работать на Windows XP плюс интерактивная доска SMART, во-вторых, потому что я не понимаю, как использовать RealTimeStylus в CPython, поэтому мне нужно переключиться на IronPython, а затем мой код больше не будет работать на Linux/Mac.

Дэймон.

1 ответ

Решение

Для необработанных сообщений мыши вы можете использовать WM_INPUT на XP и позже. Семерка добавила сенсорный материал: WM_GESTURE а также WM_TOUCH

Другие вопросы по тегам