对Windows中的平板电脑/鼠标事件的精确响应

时间:2009-09-29 00:36:40

标签: python winapi tablet-pc

如何告诉Windows不要对平板电脑笔事件进行无益的预处理?

我正在使用Python 2.6进行编程,目标是运行Windows 7的平板电脑(尽管我希望我的程序只需对带有SMART交互式白板的XP进行少量修改,对于Linux / Mac上的鼠标用户进行修改)。我编写了一个程序,它挂钩到正常的Windows鼠标事件,WM_MOUSEMOVE等,并在画布上写入。

问题是鼠标消息在到达我的应用程序之前正在摆弄。我发现如果我长笔画并在笔画之间暂停,那么鼠标消息就会被正确发送。但是如果我做了几次快速的短暂击打,那么有些东西正在进行无益的预处理。具体来说,如果我做了一个大约10个像素长的向下笔划,然后在第一个的右边做了另外一个大约5个像素的向下行程,那么第二个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) 

但它没有效果。

我尝试使用SetWindowsHookEx为鼠标驱动程序编写一个低级别的挂钩,但它不起作用 - 显然鼠标消息在被发送到我的低级Windows挂钩之前就已经过预处理了。 / p>

我非常感谢有关如何关闭此预处理的建议。我不想切换到RealTimeStylus - 首先是因为它无法在Windows XP和SMART交互式白板上工作,其次是因为我看不到如何在CPython中使用RealTimeStylus,所以我需要切换到IronPython,然后我的代码将不再在Linux / Mac上运行。

戴蒙。

1 个答案:

答案 0 :(得分:1)

对于原始鼠标消息,您可以在XP及更高版本上使用WM_INPUT。 Seven添加了一些特定于触摸的内容:WM_GESTUREWM_TOUCH