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