TextPattern および埋め込みオブジェクトの概要
メモ |
---|
このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージ UI Automation クラスを使用する .NET Framework 開発者を対象としています。UI Automationに関する最新情報については、「Windows Automation API: UI Automation (Windows オートメーション API: UI オートメーション)」を参照してください。 |
ここでは、テキスト ドキュメントまたはコンテナー内で、埋め込みオブジェクトつまり子要素を Microsoft UI Automationが公開する方法について説明します。
UI Automationでは、埋め込みオブジェクトはテキスト以外の境界を持つ要素です。たとえば、イメージ、ハイパーリンク、テーブル、Microsoft Excel のスプレッドシートや Microsoft Windows Media ファイルなどのドキュメント タイプがあります。 これは、あるアプリケーションで要素が作成され、別のアプリケーション内に埋め込まれる (リンクされる) ことを意味する標準的な定義とは異なります。 オブジェクトを元のアプリケーションで編集できるかどうかは、UI Automationとは無関係です。
このトピックは、次のセクションで構成されています。
- 埋め込みオブジェクトと UI オートメーション ツリー
- TextPattern と TextPatternRange を使用した埋め込みオブジェクトの公開
- 一般的なシナリオ
- 関連トピック
埋め込みオブジェクトと UI オートメーション ツリー
UI Automation ツリーのコントロール ビューでは、埋め込みオブジェクトは個々の要素として扱われます。 テキスト コンテナーの子として公開され、UI Automationの他のコントロールと同じモデルをとおしてアクセスできます。
テーブル、イメージ、およびハイパーリンクの埋め込みオブジェクトのあるテキスト コンテナーの例
前で示したテキスト コンテナーの一部に対するコンテンツ ビューの例
TextPattern と TextPatternRange を使用した埋め込みオブジェクトの公開
TextPattern コントロール パターン クラスと TextPatternRange クラスを組み合わせて使用すると、埋め込みオブジェクトのナビゲーションと照会を簡単にするメソッドとプロパティが公開されます。
テキスト コンテナーのテキスト コンテンツ (中のテキスト) と埋め込みオブジェクト (ハイパーリンクやテーブルのセルなど) は UI Automation ツリーのコントロール ビューとコンテンツ ビューのいずれでも、連続する単一のテキスト ストリームとして公開されます。オブジェクトの境界は無視されます。UI オートメーション クライアントが何かの方法で引用、解釈、または分析することを目的としてテキストを取得している場合、特別なケース (テキスト コンテンツを持つ表やその他の埋め込みオブジェクトなど) についてテキスト範囲を調べる必要があります。 これを行うには、GetChildren を呼び出して各埋め込みオブジェクトの AutomationElement を取得し、次に RangeFromChild を呼び出して各要素のテキスト範囲を取得します。 この操作を、すべてのテキスト コンテンツが取得されるまで繰り返します。
埋め込みオブジェクトを含むテキスト ストリームと、埋め込みオブジェクトの範囲の例
テキスト範囲の内容をスキャンする必要がある場合、Move メソッドを正常に実行するために内部的に行われる一連の手順があります。
テキスト範囲が正規化されます。つまり、テキスト範囲は Start エンドポイントで低次元テキスト範囲に縮小されます。これにより、End エンドポイントは不要になります。 この手順は、テキスト範囲が複数の TextUnit 境界にわたる状況で、あいまいさを排除するために必要です。たとえば、"{" と "}" がテキスト範囲エンドポイントである "{The U}RL https://www.microsoft.com is embedded in text" のような場合です。
結果として得られる範囲は、DocumentRange 内で、要求された TextUnit 境界の先頭に向かって後方に移動されます。
範囲は、DocumentRange 内で、TextUnit 境界の要求された数の分、前方または後方に移動されます。
範囲は、要求された 1 つの TextUnit 境界の分、End エンドポイントを移動することによって、低次元テキスト範囲の状態から拡大されます。
テキスト範囲を Move() と ExpandToEnclosingUnit() に対して調整する方法の例
一般的なシナリオ
以下では、埋め込みオブジェクトに関係する最も一般的なシナリオの例を示します。
使用例の凡例 :
{ = Start
} = End
Hyperlink
例 1 - 埋め込みのテキスト ハイパーリンクを含むテキスト範囲
{The URL is embedded in text}.
呼び出すメソッド |
結果 |
---|---|
文字列 "The URL https://www.microsoft.com is embedded in text" を返します。 |
|
テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダー自体を表す AutomationElement です。 |
|
ハイパーリンク コントロールを表す AutomationElement を返します。 |
|
RangeFromChild (AutomationElement は前の GetChildren メソッドから返されるオブジェクト) |
"http://www.microsoft.com" を表す範囲を返します。 |
例 2 - 埋め込みのテキスト ハイパーリンクに部分的にかかるテキスト範囲
The URL http://{} is embedded in text.
呼び出すメソッド |
結果 |
---|---|
文字列 "www" を返します。 |
|
テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、ハイパーリンク コントロールです。 |
|
テキスト範囲が URL 文字列全体をカバーしていないため、null を返します。 |
例 3 - テキスト コンテナーのコンテンツを部分的に含むテキスト範囲。 テキスト コンテナーには、テキスト範囲の一部ではない埋め込みのテキスト ハイパーリンクがあります。
{The URL} is embedded in text.
呼び出すメソッド |
結果 |
---|---|
文字列 "The URL" を返します。 |
|
テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダー自体を表す AutomationElement です。 |
|
Move、パラメーターは (TextUnit.Word, 1) |
ハイパーリンクのテキストが個々の単語で構成されているため、テキスト範囲を "http" に移動します。 この場合、ハイパーリンクは単一のオブジェクトとして扱われません。 The URL {http} is embedded in text. |
イメージ
例 1 - 埋め込まれたイメージを含むテキスト範囲
{The image is embedded in text}.
呼び出すメソッド |
結果 |
---|---|
文字列 "The is embedded in text" を返します。 イメージに関連付けられている ALT テキストがテキスト ストリームに含まれることは期待できません。 |
|
テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダー自体を表す AutomationElement です。 |
|
イメージ コントロールを表す AutomationElement を返します。 |
|
RangeFromChild (AutomationElement は前の GetChildren メソッドから返されるオブジェクト) |
"" を表す低次元テキスト範囲を返します。 |
例 2 - テキスト コンテナーのコンテンツを部分的に含むテキスト範囲。 テキスト コンテナーには、テキスト範囲の一部ではない埋め込まれたイメージがあります。
{The image} is embedded in text.
呼び出すメソッド |
結果 |
---|---|
文字列 "The image" を返します。 |
|
テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダー自体を表す AutomationElement です。 |
|
Move、パラメーターは (TextUnit.Word, 1) |
テキスト範囲を "is " に移動します。 テキスト ベースの埋め込みオブジェクトだけがテキスト ストリームの一部と見なされるため、この例のイメージは、Move またはその戻り値 (この場合は 1) に影響を与えません。 |
テーブル
例で使用するテーブル
イメージを含むセル |
テキストを含むセル |
---|---|
X |
|
Y |
|
Z のイメージ |
Z |
例 1 - セルのコンテンツからテキスト コンテナーを取得する
呼び出すメソッド |
結果 |
---|---|
GetItem、パラメーターは (0,0) |
テーブル セルのコンテンツを表す AutomationElement を返します。この場合は、テキスト コントロールの要素です。 |
RangeFromChild (AutomationElement は前の GetItem メソッドから返されるオブジェクト) |
イメージ を含む範囲を返します。 |
前の RangeFromChild メソッドから返されるオブジェクトに対する GetEnclosingElement |
テーブル セルを表す AutomationElement を返します。この場合は、要素は TableItemPattern をサポートするテキスト コントロールです。 |
前の GetEnclosingElement メソッドから返されるオブジェクトに対する GetEnclosingElement |
テーブルを表す AutomationElement を返します。 |
前の GetEnclosingElement メソッドから返されるオブジェクトに対する GetEnclosingElement |
テキスト プロバイダー自体を表す AutomationElement を返します。 |
例 2 - セルのテキスト コンテンツを取得する
呼び出すメソッド |
結果 |
---|---|
GetItem、パラメーターは (1,1) |
テーブル セルのコンテンツを表す AutomationElement を返します。この場合は、テキスト コントロールの要素です。 |
RangeFromChild (AutomationElement は前の GetItem メソッドから返されるオブジェクト) |
"Y" を返します。 |
参照
処理手順
UI オートメーションを使用した、埋め込みオブジェクトへのアクセス