注
このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、「Windows Automation API: UI オートメーション 」を参照してください。
この概要では、Microsoft UI オートメーションを使用して、UI オートメーションでサポートされているプラットフォームでテキスト コントロールの書式やスタイル属性などのテキスト コンテンツを公開する方法について説明します。 これらのコントロールには、Microsoft .NET Framework の TextBox と RichTextBox 、および Win32 に相当するものが含まれますが、これらに限定されません。
コントロールのテキスト コンテンツの公開は、テキスト コンテナーの内容をテキスト ストリームとして表す TextPattern コントロール パターンを使用して実現されます。 さらに、 TextPattern では、形式属性とスタイル属性を公開するために、 TextPatternRange クラスのサポートが必要になります。 TextPatternRangeは、StartとEndエンドポイントのコレクションを持つテキスト コンテナー内の連続した、または複数の不整合なテキスト スパンを表すことによってTextPatternをサポートします。 TextPatternRange では、選択、比較、取得、トラバーサルなどの機能がサポートされています。
注
TextPattern クラスは、テキストを挿入または変更する手段を提供しません。 ただし、コントロールによっては、UI オートメーション ValuePattern または直接キーボード入力を使用してこれを実現できます。 例については、 TextPattern のテキスト挿入のサンプル を参照してください。
この概要で説明する機能は、支援技術ベンダーとそのエンド ユーザーにとって不可欠です。 支援技術では、UI オートメーションを使用して、ユーザーの完全なテキスト書式設定情報を収集し、 TextUnit (文字、単語、行、または段落) によるプログラムによるナビゲーションとテキストの選択を提供できます。
UI オートメーション TextPattern と Text Services Framework
Text Services Framework (TSF) は、デスクトップおよびアプリケーション内で自然言語サービスと高度なテキスト入力を可能にする、シンプルでスケーラブルなシステム フレームワークです。 アプリケーションがテキスト ストアを公開するためのインターフェイスを提供するだけでなく、そのテキスト ストアのメタデータもサポートします。
ただし、TSF はコンテキスト対応のシナリオに入力を挿入する必要があるアプリケーション向けに設計されていましたが、 TextPattern は読み取り専用ソリューションです (上記の制限付き回避策を使用) は、スクリーン リーダーと点字デバイス用のテキスト ストアへの最適化されたアクセスを提供することを目的としています。
つまり、テキスト ストアへの読み取り専用アクセスを必要とするアクセス可能なテクノロジでは、 TextPatternを使用できますが、コンテキスト対応の入力には TSF のより複雑な機能が必要になります。
コントロール型
テキスト
Text コントロールは、画面上のテキストを表す基本的な要素です。
スタンドアロン テキスト コントロールは、フォーム上のラベルまたは静的テキストとして使用できます。 テキスト コントロールは、 ListItem、 TreeItem 、または DataItemの構造内に含めることもできます。
注
テキスト コントロールが UI オートメーション ツリーのコンテンツ ビューに表示されない場合があります (「 UI オートメーション ツリーの概要」を参照)。 これは、テキスト コントロールは、多くの場合、別のコントロールの Name プロパティを使用して表示されるためです。 たとえば、Edit コントロールのラベル付けに使用されるテキストは、Edit コントロールの Name プロパティを通じて公開されます。 エディット コントロールは UI オートメーション ツリーのコンテンツ ビューにあるため、テキスト要素自体を UI オートメーション ツリーのそのビューに含める必要はありません。 コンテンツ ビューに表示されるテキストは、冗長な情報ではないテキストだけです。 これにより、支援技術は、ユーザーが必要とする情報のみを迅速にフィルター処理できます。
[編集]
編集コントロールを使用すると、ユーザーは 1 行のテキストを表示および編集できます。
注
特定のレイアウト シナリオでは、1 行のテキストが折り返される場合があります。
ドキュメント
ドキュメント コントロールを使用すると、ユーザーは複数のテキスト ページを移動して情報を取得できます。
TextPattern クライアント API
タイプ | 説明 |
---|---|
System.Windows.Automation.TextPattern クラス |
Microsoft UI オートメーション テキスト モデルのエントリ ポイント。 このクラスには、TextSelectionChangedEventとTextChangedEventの 2 つのTextPattern イベント リスナーも含まれています。 |
System.Windows.Automation.Text.TextPatternRange クラス |
TextPatternをサポートするテキスト コンテナー内のテキストのスパンの表現。 UI オートメーション クライアントは、 TextPatternRangeを使用して作成されたテキスト範囲の現在の有効性に注意する必要があります。 テキスト コントロール内の元のテキストが新しいテキストに完全に置き換えられると、現在のテキスト範囲が無効になります。 ただし、元のテキストの一部のみが変更され、基になるテキスト コントロールが絶対文字配置ではなく、アンカー (またはエンドポイント) を使用してそのテキスト "ポインター" を管理している場合、テキスト範囲は引き続き実行可能性があります。 クライアントは、 TextChangedEvent をリッスンして、作業中のテキスト コンテンツに対する変更を通知できます。 |
System.Windows.Automation.AutomationTextAttribute クラス |
テキスト範囲の書式設定属性を識別するために使用します。 |
TextPattern プロバイダー API
ネイティブまたは Microsoft UI オートメーション プロキシを使用して、ITextProviderインターフェイスとITextRangeProvider インターフェイスを実装してTextPatternをサポートする UI 要素またはコントロールは、堅牢なナビゲーション機能を提供するだけでなく、含まれるテキストの詳細な属性情報を公開できます。
コントロールが特定の属性をサポートしていない場合、 TextPattern プロバイダーはすべてのテキスト属性をサポートする必要はありません。
コントロールがテキストの選択またはテキスト領域内でのテキスト カーソル (またはシステム キャレット) の配置をサポートしている場合、 TextPattern プロバイダーは、 GetSelection および Select 関数をサポートする必要があります。 コントロールがこの機能をサポートしていない場合は、これらのメソッドのいずれかをサポートする必要はありません。 ただし、コントロールは、 SupportedTextSelection プロパティを実装することによってサポートされるテキスト選択の種類を公開する必要があります。
TextPattern プロバイダーでは、TextUnit定数CharacterとDocument、サポートできるその他のTextUnit定数を常にサポートする必要があります。
注
プロバイダーは、Character、Format、Word、Line、Paragraph、Page、Documentの順でサポートされる次の最大TextUnitに遅延することで、特定のTextUnitのサポートをスキップできます。
API(アプリケーション・プログラミング・インターフェース) | 説明 |
---|---|
ITextProvider インターフェイス |
クライアント アプリケーションでの TextPattern をサポートするメソッド、プロパティ、属性を公開します ( ITextProviderを参照)。 |
ITextRangeProvider インターフェイス |
テキスト プロバイダー内のテキストのスパンを表します ( ITextRangeProviderを参照)。 |
System.Windows.Automation.TextPatternIdentifiers クラス |
テキスト プロバイダーの識別子として使用される値が含まれています ( TextPatternIdentifiersを参照)。 |
安全
UI オートメーション アーキテクチャは、セキュリティを念頭に置いて設計されています ( UI オートメーションのセキュリティの概要を参照)。 ただし、この概要で説明する TextPattern クラスには、いくつかの特定のセキュリティに関する考慮事項が必要です。
Microsoft UI オートメーション テキスト プロバイダーは、読み取り専用インターフェイスを提供し、コントロール内の既存のテキストを変更する機能を提供しません。
UI オートメーション クライアントは、完全に "信頼" されている場合にのみ Microsoft UI オートメーションを使用できます。 たとえば、既知の信頼されたアプリケーションのみを実行できる、保護されたログオン デスクトップがあります。
UI オートメーション プロバイダーの開発者は、Microsoft UI オートメーションを介してコントロールで公開することを選択したすべての情報が、基本的にパブリックであり、他のコードから完全にアクセス可能であることを認識する必要があります。 Microsoft UI オートメーションは、UI オートメーション クライアントの信頼性を判断する努力をしません。そのため、UI オートメーション プロバイダーは、保護されたコンテンツや機密性の高いテキスト情報 (パスワード フィールドなど) を公開しないでください。
Windows Vista のセキュリティにおける最も重要な変更の 1 つは、最も低い特権 (または制限付き) ユーザー アカウント (LUA) や UI 特権レベル分離 (UIPI) などのテクノロジを含む"Secure Input" と広く呼ばれます。
UIPI は、あるプログラムが別の "特権のある" プログラムを制御または監視するのを防ぎ、ユーザー入力のスプーフィングを行うクロスプロセス ウィンドウ メッセージ攻撃を防ぎます。
LUA は、Administrators グループ内のユーザーが実行するアプリケーションの特権に制限を設定します。 アプリケーションは必ずしも管理者特権を持つわけではありませんが、代わりに必要最小限の特権で実行されます。 その結果、LUA シナリオではいくつかの制限が適用される可能性があります。 特に、文字列の切り捨て (TextPattern 文字列を含む)。管理者レベルのアプリケーションから取得される文字列のサイズを制限して、アプリケーションを無効にする時点までメモリを割り当てないようにする必要がある場合があります。
[パフォーマンス]
TextPattern はほとんどの機能をクロスプロセス呼び出しに依存しているため、コンテンツを処理する際のパフォーマンスを向上させるキャッシュ メカニズムは提供されません。 これは、 GetCachedPattern または TryGetCachedPattern メソッドを使用してアクセスできる Microsoft UI オートメーションの他のコントロール パターンとは異なります。
パフォーマンスを向上させるための 1 つの戦術は、UI オートメーション クライアントが、 GetTextを使用して中程度のサイズのテキスト ブロックを取得しようとすることです。 たとえば、GetText(1) の呼び出しでは文字ごとにクロスプロセス ヒットが発生しますが、1 つの GetText(-1) 呼び出しでは 1 つのクロスプロセス ヒットが発生しますが、テキスト プロバイダーのサイズによっては待機時間が長くなる可能性があります。
TextPattern の用語
属性
テキスト範囲の書式設定特性 ( IsItalicAttribute や FontNameAttributeなど)。
範囲の縮退
縮退範囲は、空または 0 文字のテキスト範囲です。 TextPattern コントロール パターンの目的上、テキスト挿入ポイント (またはシステム キャレット) は縮退範囲と見なされます。 テキストが選択されていない場合、 GetSelection はテキスト挿入ポイントで縮退範囲を返し、 RangeFromPoint は縮退範囲を開始エンドポイントとして返します。
RangeFromChild および GetVisibleRanges は、テキスト プロバイダーが特定の条件に一致するテキスト範囲を見つけることができない場合に、縮退範囲を返す可能性があります。 この縮退範囲は、テキスト プロバイダー内の開始エンドポイントとして使用できます。
FindText検出された範囲と縮退範囲との混同を避けるために、null 参照 (Microsoft Visual Basic .NET でNothing
) を返FindAttribute。
埋め込みオブジェクト
UI オートメーション テキスト モデルには、2 種類の埋め込みオブジェクトがあります。 ハイパーリンクやテーブルなどのテキスト ベースのコンテンツ要素と、画像やボタンなどのコントロール要素で構成されます。 詳細については、「 UI オートメーションを使用して埋め込みオブジェクトにアクセスする」を参照してください。
エンドポイント
テキスト コンテナー内のテキスト範囲の絶対 Start または End ポイント。
始点と終点のセットを次に示します。
TextRange
関連付けられているすべての属性と機能を含む、テキスト コンテナー内のテキストのスパン (開始ポイントと終了ポイントを含む) の表現。
TextUnit
テキスト範囲の論理セグメント間を移動するために使用される、事前に定義されたテキストの単位 (文字、単語、行、または段落)。
こちらも参照ください
- クライアントのための UI オートメーション コントロール パターン
- UI オートメーション コントロール パターンの概要
- UI オートメーション ツリーの概要
- UI オートメーションでキャッシュを使用する
- UI オートメーション プロバイダーのコントロール パターンをサポートする
- UI オートメーション クライアント の コントロール パターン マッピング
- テキストサービスフレームワーク