最近マジックマウスを購入しました。それは素晴らしく、可能性に満ちています。残念ながら、それはソフトウェア サポートによって深刻に妨げられています。私はそれを修正したい。私は非常に多くの調査を行ってきましたが、これまでのイベント チェーンに関する調査結果は次のとおりです。
- Magic Mouse は、完全なマルチタッチ イベントをシステムに送信します。
- マルチタッチ イベントは MultitouchSupport.framework (Carbon) で処理されます。
- イベントはフレームワークで解釈され、通常のイベントとしてシステムに送信されます
- 1 本の指でスクロールすると、実際のスクロール ホイール イベントが送信されます。
- 2 本の指でスワイプすると、スワイプ イベントが送信されます。
- NSTouch イベントはシステムに送信されません。NSTouch API を使用してマウスを操作することはできません。
上記のすべてを発見した後、MultitouchSupport.framework ファイルを逆アセンブルし、いくつかのグーグルで、独自のコールバックをチェーンに挿入して生のタッチ イベント データを受け取る方法を見つけました。デバイスのリストを列挙すると、デバイス (トラックパッドとマウス) ごとにアタッチできます。この発見により、マウスでマルチタッチを使用するためのフレームワークを作成できますが、これは単一のアプリケーションでのみ可能です。ここで私の投稿を参照してください: Raw Multitouch Tracking .
1つのアプリだけでなく、システム全体で新しい機能をマウスに追加したい。
そうしようとして、イベント タップを使用して、最下位レベルのイベント タップで生データを取得して解釈し、その場所に独自のイベントを送信できるかどうかを確認する方法を見つけました。残念ながら、そうではありません。イベント タップは、HID レベルであっても、入力が MultitouchSupport.framework で解釈されるよりも 1 ステップ上にあります。
ここで私のイベント タップ試行を参照してください: Event Tap - Attempt Raw Multitouch。
興味深い補足: スワイプなどのマルチタッチ イベントを受信すると、デフォルトのケースがヒットし、イベント番号 29 が出力されます。ヘッダーには、28 が最大として表示されます。
私の質問に移ります。すべての情報を入手し、私が試したことを確認したところで、Magic Mouse の機能を拡張するための最良のアプローチは何でしょうか? 入力が処理されて事前定義されたイベントがディスパッチされる前に、入力を取得するのに十分な低レベルで何かを挿入する必要があることはわかっています。したがって、それを 1 文の質問に要約すると、次のようになります。
- MultitouchSupport.framework で使用されるデフォルトのコールバックをオーバーライドする方法はありますか?
- kext を作成し、すべての着信データを自分で処理する必要がありますか?
- 現在入力を処理している kext の上にあるkext を作成し、その kext がすべてのハードワークを行った後にそれをフィルタリングすることは可能ですか?
私の最初の目標は、クリック時にデバイスに 2 本の指がある場合に、中ボタンのクリック イベントをディスパッチできるようにすることです。明らかに、できることははるかに多くありますが、今のところ、これは撮影するのに良いことのようです.
前もって感謝します!
-サスティラ