Pregunta

¿Cómo puedo decirle a Windows que no hagan un preprocesamiento inútil en eventos de la pluma de la tableta?

Estoy programando en Python 2.6, Targetting Tablet PCS que ejecutan Windows 7 (aunque me gustaría que mi programa funcione con poca modificación en XP con una pizarra interactiva inteligente y para los usuarios del mouse en Linux/Mac). He escrito un programa que se inclina en los eventos normales de Windows Mouse, WM_MouseMove, etc., y escribe en un lienzo.

El problema es que los mensajes del mouse están siendo juzgados antes de que lleguen a mi aplicación. Descubrí que si hago golpes largos y hago una pausa entre trazos, los mensajes del mouse se envían correctamente. Pero si hago varios trazos cortos rápidos, algo está haciendo un preprocesamiento inútil. Específicamente, si hago un golpe descendente de unos 10 píxeles de largo, y luego hago otro golpe descendente de unos cinco píxeles a la derecha del primero, entonces el segundo WM_Mousedown informa que proviene exactamente del mismo lugar que el primero.

Esto parece una especie de preprocesamiento, tal vez para que las aplicaciones ingenuas no se confundan con los dobles clics. Pero para mi aplicación, donde quiero una respuesta muy fiel a los gestos rápidos, es inútil.

Encontré una referencia al MicrosoftTableTpenserviceProperty Atom, y al estilo de la ventana CS_DBLCLKS, y los desactivé con la siguiente pieza del código 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) 

Pero no tiene ningún efecto.

Intenté escribir un gancho de bajo nivel para el controlador del mouse, con setWindowshookex, pero no funciona; obviamente, los mensajes del mouse se están procesando incluso antes de que se envíen a mi gancho de Windows de bajo nivel.

Estaría muy agradecido por los consejos sobre cómo apagar este preprocesamiento. No quiero cambiar a RealTimestylus, primero porque no funcionará en Windows XP Plus Smart Interactive Whiteboard, segundo porque no puedo ver cómo usar RealTimestylus en Cpython, por lo que necesitaría cambiar a Ironpython y luego Mi código ya no se ejecutaría en Linux/Mac.

Damon.

¿Fue útil?

Solución

Para mensajes de ratón crudo, puede usar WM_INPUT en XP y más tarde. Siete agregaron algunas cosas específicas del toque: WM_GESTURE y WM_TOUCH

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top