6

Safari、Pages、TextEdit、Word など、最前面のアプリケーション ウィンドウで現在選択されているテキストを取得し、そのテキストで何かを行う必要があるアプリケーションにすぐに取り組みます。

私の目標は、できるだけ多くのアプリケーションで機能するソリューションを見つけることです。これまでAppleScriptを使用することを考えていましたが、それでは私のサービスで使用できるアプリケーションの量が制限されてしまいます。少なくとも、Safari、Firefox (AppleScript なし?)、Word、Pages、Excel、TextEdit などの一般的なアプリケーションをサポートする必要があります。

また、 clipboardのコンテンツを一時変数に保持してから、テキストのコピー操作 (Cmd-C) をシミュレートし、テキストを取得してから元のコンテンツに戻すことも考えました。これにより、コピー操作時に [編集] メニュー項目が強調表示される可能性があります。シミュレートされており、私には少しハッキーに思えます。IMO このソリューションは、商用製品には十分ではないようです。

また、将来的にいくつかの追加機能を追加するために、選択以上のもの (つまり、Safari や Word のページの完全なコンテンツなど) を取得したいと考えています。

この動作を実装する方法に関するアイデア/詳細はありますか?

ヒントを事前にありがとう!

注意: 少なくとも 10.4 以降をサポートする必要がありますが、理想的には 10.4 よりも古いバージョンもサポートする必要があります。

アップデート:

私が選んだ解決策: 「責任の連鎖」デザイン パターン (GOF) を使用して、3 つの異なる入力方法 (ペーストボード、AppleScript、およびアクセシビリティ) を組み合わせ、利用可能な最適な入力ソースを自動的に使用します。

NSAppleScript の executeAndReturnError: NSAppleEventDescriptor (「記述子」インスタンスとしましょう) を返すメソッドを使用する場合、[descriptor stringValue] メソッドが何かを返すには、AppleScript で「tell」ブロックの外側で「return someString」を使用する必要があることに注意してください。それ以外の場合は何も返されません。

4

3 に答える 3

1

アクセシビリティは機能しますが、支援機器へのアクセスがオンになっている場合に限ります。

現在のアプリケーションを取得してから、フォーカスされたUI要素を取得してから、選択したテキスト範囲とその値(テキスト全体)および選択したテキスト範囲を取得する必要があります。選択したテキストを取得することもできますが、それは複数の選択を連結するか無視します。

これらの手順のいずれかが失敗する場合に備えてください。アプリにウィンドウが表示されていない、フォーカスのあるUI要素がない、フォーカスされたUI要素にテキストがない、フォーカスされたUI要素に選択されたテキスト範囲が空である可能性があります。

于 2009-09-28T14:52:52.763 に答える