Question

Comment puis-je dire à Windows de ne pas faire de prétraitement inutile sur les événements du stylo à tablette?

Je programmer dans Python 2.6, en ciblant les tablettes PC exécutant Windows 7 (bien que je souhaite que mon programme fonctionne avec peu de modification sur XP avec un tableau blanc interactif intelligent et pour les utilisateurs de souris sur Linux / Mac). J'ai écrit un programme qui s'accroche aux événements normaux de Windows Mouse, WM_MOUSEMOVE etc., et écrit sur une toile.

Le problème est que les messages de la souris sont joués avant d'atteindre ma demande. J'ai trouvé que si je fais de longs traits et que je fais une pause entre les traits, les messages de la souris sont envoyés correctement. Mais si je fais plusieurs coups courts rapides, alors quelque chose fait un prétraitement inutile. Plus précisément, si je fais un coup d'environ 10 pixels de long, puis je fais un autre en aval d'environ cinq pixels à droite du premier, le deuxième WM_Mousedown rapporte qu'il vient exactement du même endroit que le premier.

Cela ressemble à une sorte de prétraitement, peut-être pour que les applications naïves ne soient pas confuses à propos des doubles clics. Mais pour mon application, où je veux une réponse très fidèle aux gestes rapides, c'est inutile.

J'ai trouvé une référence à l'atome MicrosoftTableTPenServiceProperty, et au style de fenêtre CS_DBLCLKS, et je les ai désactivés tous les deux avec le morceau de code Python suivant:

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) 

Mais cela n'a aucun effet.

J'ai essayé d'écrire un crochet de bas niveau pour le pilote de souris, avec SetwindowshooKex, mais cela ne fonctionne pas - évidemment, les messages de la souris sont pré-traités avant même qu'ils ne soient envoyés à mon crochet Windows de bas niveau.

Je serais très reconnaissant pour les conseils sur la façon de désactiver ce prétraitement. Je ne veux pas passer à RealtimeStylus - d'abord car cela ne fonctionnera pas sur Windows XP Plus Smart Interactive Whiteboard, deuxième parce que je ne vois pas comment utiliser Realtimestylus dans CPYthon, donc j'aurais besoin de passer à IronPython, puis Mon code ne s'exécuterait plus sur Linux / Mac.

Damon.

Était-ce utile?

La solution

Pour les messages de souris brutes, vous pouvez utiliser WM_INPUT sur XP et plus tard. Sept ont ajouté des trucs spécifiques à Touch: WM_GESTURE et WM_TOUCH

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top