2011-02-09 11 views
4

編集:私は、アクセシビリティAPIの初期調査で誤解を受けました。 AX階層内の安全なテキストフィールドを見つけたら、簡単に値を設定することができました。それを超えてこの質問をどうすればいいのか分からないが、将来のサーチャーのためにこれを更新したいと思った。AXIElementPostKeyboardEventのNSStringからkeyCode +修飾子への変換

アクセシビリティAPIを使用してキーボードイベントをターゲットアプリケーションにポストするコードに取り組んでいます。これまでは、私は文字列値を入力し、それらのキーコードでキーボードイベントをターゲットアプリケーションにポストすることができる簡単なアプリケーションを書くことができました。実際には、文字列は別の場所から読み取られます。

私がまだ理解できなかったことは、どの修飾キーが投稿されるべきかどうかを確認する方法です。たとえば、私がテストアプリケーションにHello, world!と入力すると、入力は他のアプリケーションにhello, world1として送信されます。これは、大文字のHと感嘆符を作成する修飾キーはまだ含まれていないためです。これは、マルチキーストローク文字(éまたはüなど)によって二重に複雑になりました。 éを送信すると、たとえばアクセントのない生のeが送信されます。

特定のNSStringまたはunicharを作成するためのキーコードと組み合わされる修飾子を識別するための見落としがある簡単な方法はありますか?そうでない場合は、どのように進むべきかの提案を誰かが持っていますか?これまでのところ、最高のものは、UCKeyTranslateにすべての修飾子の組み合わせを使用して呼び出すことです。unicharと一致するものが見つかりました-[NSString characterAtIndex:]これはスケーラブルで信頼できるとは確信できませんが、いくつかの文字は上記のとおりです。

ありがとうございます!

答えて

1

これはおそらく役に立ちません。ただの場合:キーボードイベントを送ることは本当に必要ですか?なぜなら、もしあなたがサポートする必要があれば、それは本当に困難になるからです。

insertText:とdoCommandBySelector:をオーバーライドして、個々のキーストロークではなく、キーシーケンスの結果を送信するのは簡単です。

+0

いいえ、パスワード入力欄にテキストを入力する必要があることがありますが、パスワードフィールドを表すAXUIElementsでは値を直接入力することはできません。通常のアクセシビリティ値の設定呼び出し。 (彼らがしたかった!) – jxpx777

+0

ロスのアプローチのもう一つの問題は、結局ファイルから文字列を読み込み、その値を他のアプリケーションに送ることです。 – jxpx777

1

私はtrickの例を見つけましたが、それは不完全です。どのような場合でも一般的な解決策はありません...どのように複数のキーボードレイアウトを処理できますか?

CGPostKeyboardEvent(charのみを渡すことはできませんか?)はまだ使用できます(文書化されていない印を付けられていますが、..)。

EDIT:辞書を構築するための方法としてのUCKeyTranslate。興味深いですが、どのようにOSがこれを行うのですか?より良い答えはどこかに隠されるべきです!