タブレット ペン イベントで役に立たない前処理を行わないように Windows に指示するにはどうすればよいですか?
私は Python 2.6 でプログラミングしており、Windows 7 を実行しているタブレット PC をターゲットにしています (ただし、SMART インタラクティブ ホワイトボードを使用して XP で少し変更を加えるだけで、Linux/Mac のマウス ユーザーのためにプログラムを動作させたいと考えています)。通常の Windows マウス イベント、WM_MOUSEMOVE などにフックし、キャンバスに書き込むプログラムを作成しました。
問題は、マウス メッセージがアプリケーションに到達する前にいじられていることです。長いストロークを作成してストローク間で一時停止すると、マウス メッセージが適切に送信されることがわかりました。しかし、私が何度か素早く短いストロークを行うと、何かが役に立たない前処理を行っています。具体的には、約 10 ピクセルの長さのダウン ストロークを作成し、最初のダウン ストロークの約 5 ピクセル右側に別のダウン ストロークを作成すると、2 番目の 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 フックに送信される前に前処理されています。
この前処理をオフにする方法についてアドバイスをいただければ幸いです。RealTimeStylus に切り替えたくありません。まず、Windows XP と SMART インタラクティブ ホワイトボードでは動作しないためです。次に、CPython で RealTimeStylus を使用する方法がわからないため、IronPython に切り替える必要があります。私のコードは Linux/Mac で動作しなくなりました。
デイモン。