Pergunta

Como posso dizer ao Windows para não fazer um pré-processamento inútil em eventos de caneta para tablets?

Estou programando no Python 2.6, direcionando PCs para tablets executando o Windows 7 (embora eu queira que meu programa trabalhasse com pouca modificação no XP com um quadro branco interativo inteligente e para usuários de mouse no Linux/Mac). Eu escrevi um programa que se conecta aos eventos normais do Windows Mouse, WM_MouseMove etc. e escreve em uma tela.

O problema é que as mensagens do mouse estão sendo ridicularizadas antes de chegarem à minha aplicação. Descobri que, se eu fizer traços longos e pausarem entre os golpes, as mensagens do mouse são enviadas corretamente. Mas se eu fizer vários movimentos curtos rápidos, algo está fazendo um pré-processamento inútil. Especificamente, se eu fizer um desbaste de cerca de 10 pixels de comprimento, e depois fizer outro lenço a jusante a cerca de cinco pixels à direita da primeira, o segundo WM_Mousedown relata que ele vem exatamente do mesmo lugar que o primeiro.

Parece algum tipo de pré-processamento, talvez para que aplicativos ingênuos não fiquem confusos com os cliques duplos. Mas, para minha aplicação, onde quero uma resposta muito fiel a gestos rápidos, é inútil.

Encontrei uma referência ao MicrosoftTableTenserviceProperty Atom e ao estilo da janela CS_DBLCLKS, e desligei os dois com a seguinte parte do 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) 

Mas isso não tem efeito.

Tentei escrever um gancho de baixo nível para o driver do mouse, com o setWindowshookex, mas não funciona-obviamente as mensagens do mouse estão sendo pré-processadas mesmo antes de serem enviadas para o meu gancho do Windows de baixo nível.

Eu ficaria muito grato por conselhos sobre como desligar esse pré-processamento. Eu não quero mudar para o Realtimestylus - primeiro porque não funcionará no Windows XP Plus Smart Interactive Whiteboard, segundo porque não consigo ver como usar o Realtimestylus em Cpython, então eu precisaria mudar para o Ironpython e depois Meu código não seria mais executado no Linux/Mac.

Damon.

Foi útil?

Solução

Para mensagens cruas do mouse, você pode usar WM_INPUT no XP e mais tarde. Sete acrescentaram algumas coisas específicas de toque: WM_GESTURE e WM_TOUCH

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top