1

グローバルイベント(キーダウン)をリッスンするOSXアプリを作成しています。

[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event){       
     //execute this code when keys are pressed
}];

たとえば、次のようなことを実行したいと思います。
サファリ(または他のアプリ)を使用して、テキストフィールドに入力し、キー「hhh」を押します。私のアプリは、これらのキーが押されたという通知を受け取り、入力していたテキストフィールドに「こんにちは」と書き込みます。

では、テキストフィールドに入力しているときにユーザーがキー「hhh」を押したことをどのように知ることができますか?また、プログラムでそのテキストフィールドに「こんにちは」と書くにはどうすればよいですか?ありがとう

4

2 に答える 2

0

アクセシビリティ フレームワーク (および別の回答で提案されている補助デバイス) は、ここでは何も役に立ちません。画面上のウィンドウを操作できますが、内部のビュー階層 (および NSTextField を含む) は操作できません。

ここには 2 つのオプションがあります。SIMBL または AppleScript のいずれかを使用できます。要素の操作に関しては、SIMBL の方が柔軟性が高いので、SIMBL を使用することをお勧めします。SIMBL を使用すると、選択したアプリに読み込まれる「微調整」ライブラリをコンパイルして、アプリケーションの動作を効果的にオーバーライドし、機能を追加できます。

アプリでグローバル キープレス イベントを引き続き検出し、IPC/XPC を使用して「微調整」ライブラリと通信し、現在アクティブな NSTextField を変更するように通知するか、中央管理が必要ない場合は、このロジックを配置することができます。微調整自体で。

フォーカスされた NSTextField は-firstResponderNSResponder チェーンの

SIMBL に関する詳細については、こちらを参照してください。AppleScriptを使用する場合は、他のアプリでのシステム (キープレスを含む) イベントの生成に関する情報を参照してください: http://en.wikibooks.org/wiki/AppleScript_Programming/System_Events

于 2012-10-31T03:22:07.983 に答える
0

メモリからこれを行うことができると思いますが、システム設定で「補助デバイスのアクセスを有効にする」を有効にする必要があります。次に、あなたが説明することは実行可能でなければなりません。これを行わないと、グローバル ハンドラでイベントを受け取りません。

于 2012-10-29T06:52:53.363 に答える