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