Точный ответ на события планшета/мыши в Windows
Вопрос
Как я могу сказать Windows не делать бесполезной предварительной обработки на таблетовых ручках?
Я программируюсь в Python 2.6, нацеленная на планшетные ПК, работающие с Windows 7 (хотя я бы хотел, чтобы моя программа работала с небольшими изменениями на XP с интеллектуальной интерактивной доской и для пользователей мышей на 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)
Но это не имеет никакого эффекта.
Я попытался написать крючок низкого уровня для драйвера мыши, с SetWindowShoekex, но он не работает-очевидно, что сообщения мыши предварительно обрабатываются еще до того, как они отправляются на мой крючок Windows низкого уровня.
Я был бы очень благодарен за совет о том, как отключить эту предварительную обработку. Я не хочу переходить на Realtimestylus - сначала потому, что он не будет работать на Windows XP Plus интерактивной интерактивной доске, во -вторых, потому что я не вижу, как использовать Realtimestylus в CPYTHON, поэтому мне нужно было бы переключиться на Ironpython, а затем Мой код больше не будет работать на Linux/Mac.
Деймон.
Решение
Для необработанных сообщений мыши вы можете использовать WM_INPUT
на XP и позже. Семь добавили некоторые прикосновения конкретных вещей: WM_GESTURE
а также WM_TOUCH