CocoaまたはCarbonを使用して画面上の単語のフレーム(位置とサイズ)を見つける

StackOverflow https://stackoverflow.com/questions/1651938

質問

これは難しいものです:

画面上の単語の位置とサイズ(そのフレーム)を見つけることができる必要があります(最初の出現で十分です。そこから次のものを取得できるはずです)。

たとえば、SafariなどのWord、Excel、PowerPoint for Mac(およびこれらに限定されません)で単語の位置を検出できるようにしたいと思います。

解決策は可能な限り高速でなければなりません。少なくとも1秒間に5〜6ワードを見つけ、できるだけ少ないCPU時間を使用できるはずです。

これまで私が考えていたことは次のとおりです。

  • ウィンドウのスクリーンショット/グラフィックコンテキストでのOCR(Mac OS X 10.4で動作し、商用製品で使用できる優れたオープンソースフレームワーク?)。 Evernoteは、画像内の単語を見つけるのに非常に優れています。カスタムの社内エンジンを使用するのか、オープンソース/商用エンジンを使用するのかはわかりませんが、これが「有効な」場合に使用したい種類のエンジンです溶液。理想的には、アクティブなアプリケーションのウィンドウで単語のフレームを検出します(別のアプリケーションのフレームを取得する方法)。
  • 何らかの「フック」を取得するQuartzによるテキストの描画と、描画された単語の位置のインターセプト(一見したところ、実行可能性はあまり高くありません!)。
  • AppleScript。ただし、アプリケーションが提供するAPIに大きく依存し(私が見たものからWord文書で単語の座標を取得できるとは思わない)、それは遅い
  • ...アイデアのうち...

私の目標は、段落のテキストを含む文字列に基づいて、段落内のすべての単語のフレームを正しい順序で取得することです。

ヒントをお寄せいただきありがとうございます!

役に立ちましたか?

解決

出発点として、QuickCursorのコードをご覧ください。 a>。 AXアクセシビリティAPI 。これで、単語のピクセル配置を取得できなくなりますが、少なくともそのUI要素内のテキストに関連付けられたNSStringを返します。もちろんこれは、問題のアプリがこれらのAPIをサポートする必要があることを意味します。 MS Officeスイートがそうするかどうかはわかりません。さらに、編集可能な要素のみをサポートしているため、Safariで編集できないWebページも機能しません。しかし、いくつかのアイデアの出発点になるかもしれません。

QCUIElement。{m、h} を見てから、 QCAppDelegate.m beginQuickCursorEdit:)の実装を見てください。 ...抽象化されたQCUIElementの実装は次のように単純なようです:

QCUIElement *focusedElement = [QCUIElement focusedElement];
id value = focusedElement.value;

編集:ああ! Accessibility Inspectorサンプルコードを確認してください: UIElementInspector 。実際にページ上の要素のAXPositionを取得できます。今、それは単語ごとではありませんが、私たちは近づいています。テキストブロックのX、Y配置、およびテキストブロックに含まれる単語がわかります。

他のヒント

これは可能ですが、確実に動作させるのは非常に困難です。 スペルキャッチャーの直接接続で遊ぶことができます。例をご覧ください。

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