質問

最近Magic Mouseを購入しました。それは素晴らしく、可能性に満ちています。残念ながら、ソフトウェアのサポートによって深刻な障害が発生します。それを直したいのです。私はかなり多くの調査を行ってきましたが、これまでのイベント チェーンに関する発見は次のとおりです。

  1. Magic Mouse は、完全なマルチタッチ イベントをシステムに送信します。
  2. マルチタッチ イベントは MultitouchSupport.framework (Carbon) で処理されます。
  3. イベントはフレームワークで解釈され、通常のイベントとしてシステムに送信されます。
    • 1 本の指でスクロールすると、実際のスクロール ホイール イベントが送信されます。
    • 2 本の指でスワイプすると、スワイプ イベントが送信されます。
  4. NSTouch イベントはシステムに送信されません。NSTouch API を使用してマウスを操作することはできません。

上記をすべて発見した後、MultitouchSupport.framework ファイルを逆アセンブルし、いくつかのグーグル検索を使用して、生のタッチ イベント データを受信できるように独自のコールバックをチェーンに挿入する方法を見つけました。デバイスのリストを列挙すると、各デバイス (トラックパッドとマウス) に接続できます。この発見により、マウスでマルチタッチを使用するためのフレームワークを作成できるようになりますが、単一のアプリケーション内でのみ使用できます。ここの私の投稿を参照してください: 未加工のマルチタッチ トラッキング.

マウス全体に新しい機能を追加したい システム, 、単一のアプリだけではありません。

そうしようとして、私は使用方法を考え出しました イベントタップ 最下位レベルのイベント タップで生データを取得し、解釈して、代わりに独自のイベントを送信できるかどうかを確認します。残念ながらそうではありません。イベント タップは、HID レベルであっても、MultitouchSupport.framework で入力が解釈される段階より上のステップにあります。

ここで私のイベントタップ試行を参照してください。 イベントタップ - Raw マルチタッチの試行.
興味深い補足:スワイプなどのマルチタッチ イベントを受信すると、デフォルトのケースがヒットし、イベント番号 29 が出力されます。ヘッダーには 28 が最大値として示されています。

私の質問に移ります。これですべての情報が得られ、私が試したことはわかりました。Magic Mouse の機能を拡張するための最良のアプローチは何でしょうか?入力が処理されて事前定義されたイベントがディスパッチされる前に、入力を取得するには十分に低いレベルで何かを挿入する必要があることはわかっています。したがって、単一文の質問に要約すると、次のようになります。

  • MultitouchSupport.framework で使用されるデフォルトのコールバックをオーバーライドする方法はありますか?
  • kext を作成して、すべての受信データを自分で処理する必要がありますか?
  • 上にあるkextを書くことは可能ですか 現在入力を処理している kext の処理を​​行い、kext がすべてのハードワークを完了した後にフィルタリングしますか?

私の最初の目標は、クリック時にデバイス上に 2 本の指がある場合に中ボタンのクリック イベントを送出できるようにすることです。もちろん、できることはもっとたくさんありますが、今のところ、これは取り組むのに良いことのように思えます。

前もって感謝します!

-サスティラ

役に立ちましたか?

解決

どのような何が起きていることをMultitouchSupport.枠組みのマジックマウスとガラスのトラックパッド?場合でIOKitデバイス特性の疑いが必要になりますKEXTるemulates、トラックパッドが実際に伝えはできません。Appleての文書をダーウィンカーネルプログラミングのカーネルの拡張子を具体的に:

(個人的には、プレイしていただければと思い何かがピンチ倍以上にスワイプ/ボタンのしぐさ;そのままの、マジックマウスで機能的な格下げからはMighty Mouseのボタン[も常に目詰まり】2Dスクロールホイール. 更新:昨年に書いた Sesamouse めいっぱいで仕分けもバッチリでも必要ありませんのkext(けや見の六角レンチでダン:-)自分の回答のdeets、ソースコードです。)

他のヒント

私はこの答えを更新するのを忘れ、私は<のhref = "http://developer.apple.com/library/mac/documentationを経由してユーザランドからシステムにマルチタッチやジェスチャーイベントを注入する方法を考え出すことになった申し訳ありません/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html」のrel = "nofollowを">クォーツイベントサービスに。私はそれがライオンの更新を生き延びどれだけわからないんだけど、あなたは HTTPSで基本となるソースコードをチェックアウトすることができます:// github.com/calftrail/Touchする

これは2つのハックが必要です。デバイスの入力を取得するには、のプライベートのマルチタッチフレームワークを使用して、とQuartzイベントサービスにの文書化されていないのCGEvent構造を注入します。それをやってのけるする方法を見つけ出すことが信じられないほど楽しかったが、これらの日は、私はちょうどマジックトラックパッド:-Pを購入をお勧めします。

ユーザー空間でカスタマイズ可能なマルチタッチ イベント ラッパーの概念実証を実装しました。

それについてはここで読むことができます: http://aladino.dmi.unict.it/?a=multitouch (を参照 ウェイバックマシン)

- ではごきげんよう

あなたはその時点までに取得する場合は、

は、あなたの代わりに2のマウスに3本の指であるミドルクリックを検討する必要があります。私は魔法のマウスを使って、このミドルクリックの問題について考えていると私は、私は多くの場合、私は唯一の左クリックのために押していていても、マウスの上に私の第二の指を残していることがわかります。だから、「2指」をクリックして、単一の左クリックと間違われるかもしれないが、それはまた、常にマウスオフ第二指を維持することで、ユーザーより多くの労力を必要とします。それは検出することが可能だ場合そのため、3本の指はそれほどの混乱や頭痛を引き起こします。最初の「真ん中のボタンをクリックし、」どこ私は私の真ん中のために返すように:)運のベストを機能を公開する]をクリックし心配だとしてソリューションは、から来るのだろうか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top