Domanda

Come faccio a dire a Windows di non fare inutile pre-elaborazione su eventi penna tablet?

sto Programmazione in Python 2.6, destinati a un tablet PC con sistema operativo Windows 7 (anche se vorrei che il mio programma per lavorare con poca modifica su XP con una lavagna interattiva SMART, e per gli utenti del mouse su Linux / Mac). Ho scritto un programma che si aggancia nelle normali eventi del mouse di Windows, WM_MOUSEMOVE ecc, e scrive su una tela.

Il problema è che i messaggi del mouse sono truccati con prima che raggiungano la mia domanda. Ho scoperto che se faccio colpi lunghi e pausa tra colpi poi i messaggi del mouse sono inviati in modo corretto. Ma se faccio diversi tratti brevi rapidi, allora qualcosa sta facendo inutile pre-elaborazione. In particolare, se faccio una discesa di circa 10 pixel, e poi fare un'altra discesa circa cinque pixel a destra del primo, poi il secondo WM_MOUSEDOWN riferisce che si tratta esattamente dallo stesso posto come il primo.

Questo appare come una sorta di pre-elaborazione, forse in modo che le applicazioni ingenui non ottengono confusi circa doppio clic. Ma per la mia applicazione, dove voglio risposta molto fedele ai gesti rapidi, è inutile.

Ho trovato un riferimento all'atomo MicrosoftTabletPenServiceProperty, e allo stile della finestra CS_DBLCLKS, e tutti e due ho spento con il seguente pezzo di codice 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) 

Ma non ha alcun effetto.

Ho provato a scrivere un gancio di basso livello per il driver del mouse, con SetWindowsHookEx, ma non funziona - ovviamente i messaggi del mouse sono in corso di pre-elaborati, anche prima di essere inviati al mio basso livello gancio di Windows <. / p>

Le sarei molto grato per un consiglio su come disattivare questa pre-elaborazione. Non voglio passare a RealTimeStylus - in primo luogo perché non funziona su Windows XP, più lavagna interattiva SMART, secondo perché non riesco a vedere come utilizzare RealTimeStylus in CPython, quindi avrei bisogno di passare a IronPython, e poi il mio codice non avrebbe eseguito su Linux / Mac.

Damon.

È stato utile?

Soluzione

Per i messaggi di mouse grezzo, è possibile utilizzare WM_INPUT su XP e versioni successive. Sette aggiunto alcune cose specifiche touch: WM_GESTURE e WM_TOUCH

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top