実験として、次のことを達成しようとしています。
- Shift キーのように、スペースバーを修飾キーとして機能させます。スペースバー キーを押したままにしておくと、キーを入力すると、異なる文字が出力されます。スペースバーを放すと状態が通常に戻り、それを押すだけで通常のスペース キーのように動作します。
キーダウンとキーアップのイベントを処理することを考えていましたが、どうやらhandleEvent:client:
IMKServerInputプロトコルではキーダウンとマウスのイベントのみをキャッチするようです。
ココアの経験があまりないので、いくつかの方法を試しましたが成功しませんでした:
- インターネットアーカイブを介してテクニカルノート2128を調べたところ、plistアイテムの適切な説明が得られました。それでも、キーアップについては何もありません。
- IMKStateSetting Protocol
recognizedEvents:
にNSKeyUpMask を追加しようとしましたが、それもイベントをキャッチしていないようです。 - addLocalMonitorForEventsMatchingMask:handler:で少しテストしました が、何も起こりません。
NSFlagsChanged
スペースバーでイベントを発生させる方法が見つかりませんでした。- Quartz Event Serviceについて読ん
CGEventTap
でください。これは、下位レベルでユーザー入力を処理しているようです。まだこのルートには進んでいません。 - IOHIDマネージャー?
IMKit は受動的にイベントを受信することしかできないという結論に達しました。アプリケーションではないためkeyUp:
、オーバーライドする方法はありません-AFAIK、IMKitはNSResponder
クラスを継承しません。
残念なことに、cocoa はあまりにも広範すぎて、私のような初心者が飛び込むためのドキュメンテーションがはるかに少ない (または役に立たないもので溢れている) のです。
誰でも正しい方向に私を助けることができますか?