UI オートメーション TextPattern の概要

Note

このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、Windows Automation API の「UI オートメーション」を参照してください。

この概要では、Microsoft UI オートメーションを使用して、UI オートメーションでサポートされているプラットフォームのテキスト コントロールのテキストの内容 (書式とスタイルの属性など) を公開する方法について説明します。 これらのコントロールには、Microsoft .NET Framework TextBoxRichTextBox、およびその Win32 に相当するものが含まれますが、これに限定されません。

コントロールのテキストの内容は、 TextPattern コントロール パターンを使用することで公開できます。コントロール パターンは、テキスト コンテナーの内容をテキスト ストリームとして表したものです。 さらに、 TextPattern は、書式とスタイルの属性を公開する TextPatternRange クラスをサポートする必要があります。 TextPatternRange は、 TextPattern および Start エンドポイントのコレクションがあるテキスト コンテナーに、連続する、または複数の非結合テキスト範囲を表すことで End をサポートします。 TextPatternRange は、選択、比較、取得、トラバースなどの機能をサポートしています。

Note

TextPattern クラスには、テキストを挿入または変更する手段がありません。 ただし、コントロールによっては、UI オートメーション ValuePattern によって、またはキーボードからの直接入力によって、これを実現できます。 例については、「 TextPattern Insert Text Sample 」をご覧ください。

この概要で説明されている機能は、支援技術ベンダーとそのエンドユーザーにとって重要です。 支援技術を利用すると、UI オートメーションを使用してユーザー向けに完全なテキストの書式設定情報を収集するとともに、プログラムによるナビゲーションおよび TextUnit によるテキストの選択 (文字、単語、行、または段落) を行うことができます。

UI オートメーション TextPattern とText Services Framework (TSF)

Text Services Framework (TSF) は、デスクトップ上およびアプリケーション内で、自然言語サービスと高度なテキスト入力を行えるようにする、拡張性のあるシステム フレームワークです。 アプリケーションのテキスト ストアを公開するインターフェイスをアプリケーションに提供するだけでなく、そのテキスト ストアのメタデータもサポートします。

ただし、TSF は、コンテキストに対応したシナリオに入力を挿入する必要がある一方、TextPattern は、スクリーン リーダーとブライユ点字デバイス用のテキスト ストアに最適にアクセスできるようにすることを意図した、(前述の制限付きの回避策による) 読み取り専用のソリューションです。

つまり、テキスト ストアへの読み取り専用のアクセスが必要なアクセス可能なテクノロジでは TextPatternを使用できますが、コンテキストに対応する入力には TSF のより複雑な機能が必要になります。

コントロールの種類

テキスト

テキスト コントロールは、画面上のテキストの一部を表す基本要素です。

スタンドアロンのテキスト コントロールは、フォーム上のラベルまたは静的テキストとして使用できます。 また、テキスト コントロールを、 ListItemTreeItem 、または DataItemの構造に含めることもできます。

Note

テキスト コントロールは、UI オートメーション ツリーのコンテンツ ビューに表示されないことがあります (「UI オートメーション ツリーの概要」をご覧ください)。 これは、テキスト コントロールが別のコントロールの Name プロパティを通じて表示されることがよくあるためです。 たとえば、エディット コントロールのラベルに使用するテキストは、エディット コントロールの Name プロパティを通じて公開されます。 エディット コントロールが UI オートメーション ツリーのコンテンツ ビューに存在するので、テキスト要素自体は UI オートメーション ツリーのそのビューに存在する必要はありません。 コンテンツ ビューに表示されるテキストは、冗長な情報ではないテキストのみです。 これにより、支援テクノロジは、ユーザーが必要とする情報のみをすばやくフィルター処理できるようになります。

[編集]

エディット コントロールを使用すると、ユーザーは 1 行のテキストを表示および編集できます。

Note

1 行のテキストは、特定のレイアウトのシナリオでは折り返すことができます。

ドキュメント

ドキュメント コントロールを使用すると、ユーザーは複数のページのテキストに移動して、そこから情報を取得できます。

TextPattern クライアント API

Type 説明
System.Windows.Automation.TextPattern クラス Microsoft UI オートメーション テキスト モデルのエントリ ポイントです。

このクラスには、 TextPatternTextSelectionChangedEvent という 2 つの TextChangedEventイベント リスナーが含まれています。
System.Windows.Automation.Text.TextPatternRange クラス TextPatternをサポートする、テキスト コンテナー内のテキストの範囲の表記です。

UI オートメーション クライアントは、 TextPatternRangeを使用して作成されるテキスト範囲の現在の有効性に関して注意する必要があります。 テキスト コントロールにある元のテキストが完全に新しいテキストに置き換えられた場合、現在のテキスト範囲は無効になります。 ただし、元のテキストの一部のみが変更され、基になるテキスト コントロールが、文字の絶対位置ではなくアンカー (またはエンドポイント) が付いたテキストの「ポインター」で管理している場合、テキスト範囲にはまだいくらかの有効性があります。

クライアントは、 TextChangedEvent をリッスンして、操作するテキスト コンテンツに変更があった場合に通知を受けることができます。
System.Windows.Automation.AutomationTextAttribute クラス テキスト範囲の書式設定の属性を識別するために使用されます。

TextPattern プロバイダー API

ネイティブに、または Microsoft UI オートメーション プロキシを介して ITextProviderITextRangeProvider の各インターフェイスを実装することで TextPattern をサポートする UI 要素またはコントロールを使用すると、ナビゲーション機能が堅牢なものとなるだけでなく、含まれている任意のテキストの詳細な属性情報を公開することができます。

TextPattern プロバイダーは、コントロールで特定の属性のサポートが不足している場合、すべてのテキスト属性をサポートする必要はありません。

TextPattern プロバイダーは、コントロールがテキスト領域内でテキストの選択またはテキストのカーソル (またはシステム キャレット) の配置をサポートする場合に GetSelection 機能と Select 機能をサポートする必要があります。 コントロールがこの機能をサポートしない場合、これらのメソッドのいずれもサポートする必要はありません。 ただし、 SupportedTextSelection プロパティを実装することで、コントロールはサポートするテキスト選択項目の種類を公開する必要があります。

TextPattern プロバイダーは、 TextUnit の定数 CharacterDocument 、およびサポートが可能なその他すべての TextUnit 定数を常にサポートする必要があります。

Note

プロバイダーは、次に大きい TextUnit ( TextUnitCharacterFormatWordLineParagraphPageの順序でサポートされています) を遅らせることで、特定の Documentのサポートを省略できます。

API 説明
ITextProvider インターフェイス クライアント アプリケーションで TextPattern をサポートするメソッド、プロパティ、および属性を公開します ( ITextProviderを参照してください)。
ITextRangeProvider インターフェイス テキスト プロバイダー内のテキストの範囲を表します ( ITextRangeProviderを参照してください)。
System.Windows.Automation.TextPatternIdentifiers クラス テキスト プロバイダーの識別子として使用される値が含まれています ( TextPatternIdentifiersを参照してください)。

セキュリティ

UI オートメーション アーキテクチャは、セキュリティを考慮して設計されました (「UI オートメーションのセキュリティの概要」を参照してください)。 ただし、この概要で説明する TextPattern クラスにはいくつか特定のセキュリティの考慮事項が必要です。

  • UI オートメーション テキスト プロバイダーには、読み取り専用のインターフェイスが用意されていますが、コントロールにある既存のテキストを変更する機能はありません。

  • UI オートメーション クライアントでは、それらが完全に "信頼できる" 場合にのみ UI オートメーションを使用できます。 この一例となるものが、信頼できる既知のアプリケーションのみが実行できる、保護されたログオン デスクトップです。

  • UI オートメーション プロバイダーの開発者は、UI オートメーションを介してコントロールに公開することにしたすべての情報が、基本的にパブリックであり、他のコードから完全にアクセスできることを認識する必要があります。 Microsoft UI オートメーションによって、UI オートメーション クライアントの信頼性を判断する処理が行われることはありません。そのため、保護されたコンテンツまたは機密性の高いテキストの情報 (パスワード フィールドなど) を UI オートメーション プロバイダーで公開しないことをお勧めします。

  • Windows Vista のセキュリティにおける最も重要な変更の 1 つは、"セキュリティで保護された入力" と広く呼ばれるものです。これは、最小特権 (または制限付き) ユーザー アカウント (LUA) と UI 特権レベルの分離 (UIPI) などのテクノロジを包含しています。

    • UIPI は、プログラムが他のより「特権が高い」プログラムを制御または監視できないようにすることで、ユーザー入力になりすましたプロセス間のウィンドウ メッセージ攻撃を防ぎます。

    • LUA は、管理者グループのユーザーが実行しているアプリケーションの特権に制限を設定します。 アプリケーションには必ずしも管理者特権は必要なく、代わりに必要最小限の特権で実行します。 その結果、LUA シナリオに制限が適用される可能性があります。 最も顕著な文字列の切り捨て (TextPattern 文字列など) では、管理者レベルのアプリケーションから取得される文字列のサイズを制限する必要があることがあります。そうすることで、これらのアプリケーションは、アプリケーションを無効にするポイントまで強制的にメモリを割り当てられずに済みます。

パフォーマンス

TextPattern はその機能のほとんどでプロセス間の呼び出しに依存しているので、コンテンツを処理するときにパフォーマンスを向上させるキャッシュのメカニズムは提供しません。 これは、GetCachedPattern または TryGetCachedPattern メソッドを使用してアクセスできる Microsoft UI オートメーションの他のコントロール パターンとは異なります。

パフォーマンスを向上させるための 1 つの方法は、 GetTextを使用して、UI オートメーション クライアントに中型のテキスト ブロックの取得を試みさせることです。 たとえば、GetText(1) の呼び出しでは、文字ごとにプロセス間の影響を受けます。一方、GetText(-1) の呼び出しでは、1 つのプロセス間の影響を受けますが、テキストのプロバイダーのサイズによっては待機時間が長くなることがあります。

TextPattern 用語集

属性
テキスト範囲の書式設定特性 ( IsItalicAttribute または FontNameAttributeなど)。

低次元テキスト範囲
低次元テキスト範囲は、空または 0 文字のテキスト範囲です。 TextPattern コントロール パターンの目的から、テキスト挿入ポイント (またはシステム キャレット) は低次元テキスト範囲と見なされます。 テキストが選択されていない場合、 GetSelection は、テキスト挿入ポイントで低次元テキスト範囲を返し、 RangeFromPoint は、開始エンドポイントとして低次元テキスト範囲を返します。 テキスト プロバイダーで指定された条件に一致するテキスト範囲が見つからない場合、RangeFromChild および GetVisibleRanges は低次元テキスト範囲を返す可能性があります。 この低次元テキスト範囲は、テキスト プロバイダー内の開始エンドポイントとして使用できます。 検出した範囲と低次元テキスト範囲を混同しないように、FindTextFindAttribute により null 参照が返されます (Microsoft Visual Basic .NET の Nothing)。

埋め込みオブジェクト
UI オートメーション テキスト モデルには、2 種類の埋め込みオブジェクトがあります。 これらは、ハイパーリンクやテーブルなどのテキスト ベースのコンテンツ要素、およびイメージとボタンなどのコントロール要素で構成しています。 詳しくは、「 Access Embedded Objects Using UI Automation」をご覧ください。

エンドポイント
テキスト コンテナー内のテキスト範囲の Start または End の絶対ポイント。

TextPatternRangeEndpoints (開始および終了)。 始点と終点のセットを次に示します。

TextRange
関連するすべての属性と機能を含むテキスト コンテナーの始点と終点で、テキストの範囲を表したもの。

TextUnit
テキストの範囲の論理セグメントを介して移動するために使用するテキストの定義済みの単位 (文字、単語、行、または段落) 。

関連項目