Windowsのタブレット/マウスイベントに対する正確な応答
質問
タブレットペンイベントで役に立たない前処理をしないようにWindowsに伝えるにはどうすればよいですか?
私はPython 2.6でプログラミングしており、Windows 7を実行しているタブレットPCをターゲットにしています(ただし、Smart Interactive Whiteboardを使用したXPの変更とLinux/Macのマウスユーザー向けにプログラムを操作してください)。通常のWindowsマウスイベント、wm_mousemoveなどに接続し、キャンバスに書いているプログラムを作成しました。
問題は、マウスメッセージが私のアプリケーションに到達する前にいじり込まれていることです。ストロークの間に長いストロークをして一時停止すると、マウスメッセージが適切に送信されることがわかりました。しかし、私がいくつかの急速な短いストロークを行うと、何かが役に立たない前処理をしています。具体的には、長さ約10ピクセルのダウンストロークを作成してから、最初の右側に5ピクセルほどの別のダウンストロークを作成すると、2番目のWM_Mousownownは、最初の場所とまったく同じ場所から来ていると報告します。
これはある種の前処理のように見えます。おそらく、素朴なアプリケーションがダブルクリックについて混乱しないようにするためです。しかし、私が迅速なジェスチャーに対する非常に忠実な反応を望んでいる私のアプリケーションのために、それは役に立たない。
MicrosoftTabletPenserviceProperty Atomと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を使用して、マウスドライバー用の低レベルのフックを書いてみましたが、うまくいきません。
この前処理をオフにする方法についてのアドバイスにとても感謝しています。 Realtimestylusに切り替えたくありません。まず、Windows XPとスマートインタラクティブなホワイトボードで動作しないため、CpythonでRealtimestylusを使用する方法がわからないため、Ironpythonに切り替える必要があります。私のコードはLinux/Macで実行されなくなりました。
デイモン。
解決
生のマウスメッセージの場合、使用できます WM_INPUT
XP以降。 7つはいくつかのタッチ固有のものを追加しました: WM_GESTURE
と WM_TOUCH