次の方法で共有


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

更新 : 2007 年 11 月

ここでは、UI オートメーションがサポートするプラットフォームで、テキスト コントロールの形式やスタイル属性を含むテキスト コンテンツを、Microsoft UI オートメーションを使用して公開する方法を説明します。これらのコントロールには、Microsoft .NET FrameworkTextBoxRichTextBox、およびそれらの Win32 における等価コントロールなどがあります。

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

ms745158.alert_note(ja-jp,VS.90).gifメモ :

TextPattern クラスでは、テキストを挿入または変更することはできません。ただし、コントロールによっては、UI オートメーションValuePattern を使用するか直接キーボードに入力することによって実行できます。例については、「ValuePattern 挿入テキストのサンプル」を参照してください。

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

このトピックには次のセクションが含まれています。

  • UI オートメーション TextPattern とテキスト サービス フレームワーク
  • コントロール型
  • TextPattern クライアントの API
  • TextPattern プロバイダの API
  • セキュリティ
  • パフォーマンス
  • TextPattern の用語
  • 関連トピック

UI オートメーション TextPattern とテキスト サービス フレームワーク

テキスト サービス フレームワーク (TSF) は、デスクトップ上およびアプリケーション内での自然言語サービスと高度なテキスト入力を有効にする、単純かつ拡張可能なシステム フレームワークです。テキスト ストアを公開するためのアプリケーション用のインタフェースを提供するだけでなく、そのテキスト ストアのメタデータもサポートします。

ただし、TSF は、コンテキスト対応シナリオに入力を挿入する必要があるアプリケーション向けに設計されています。一方、TextPattern は、スクリーン リーダーや Braille デバイスのテキスト ストアへの最適化されたアクセスを提供する読み取り専用のソリューションです (上記で説明した部分的な回避策があります)。

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

コントロール型

テキスト

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

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

ms745158.alert_note(ja-jp,VS.90).gifメモ :

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

エディット

エディット コントロールでは、1 行のテキストを表示、編集できます。

ms745158.alert_note(ja-jp,VS.90).gifメモ :

1 行のテキストは、レイアウトの条件によっては折り返されることがあります。

ドキュメント

ドキュメント コントロールを使用すると、複数ページのテキスト内を移動し、情報を得ることができます。

TextPattern クライアントの API

System.Windows.Automation.TextPattern Class

Microsoft UI オートメーション テキスト モデルのエントリ ポイント。

このクラスには、TextSelectionChangedEventTextChangedEvent の 2 つの TextPattern イベント リスナもあります。

System.Windows.Automation.Text.TextPatternRange Class

TextPattern をサポートするテキスト コンテナ内のテキストの範囲の表現。

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

クライアントは、処理しているテキスト コンテンツに対するすべての変更の通知の TextChangedEvent をリッスンできます。

System.Windows.Automation.AutomationTextAttribute Class

テキスト範囲の書式設定属性を識別するために使用されます。

TextPattern プロバイダの API

ITextProvider インターフェイスと ITextRangeProvider インターフェイスをネイティブに、または Microsoft UI オートメーション プロキシを通じて実装することで、TextPattern をサポートする UI 要素またはコントロールは、信頼性の高いナビゲーション機能を提供するだけでなく、それらに含まれるテキストの詳細な属性情報も公開できます。

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

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

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

ms745158.alert_note(ja-jp,VS.90).gifメモ :

プロバイダは、サポートされる TextUnit のうち、CharacterFormatWordLineParagraphPageDocument の順序で次に大きいものに遅延することで、特定の TextUnit に対するサポートをスキップすることができます。

ITextProvider Interface

クライアント アプリケーションで TextPattern をサポートするメソッド、プロパティおよび属性を公開します (ITextProvider を参照)。

ITextRangeProvider Interface

テキスト プロバイダでのテキストの範囲を表します (ITextRangeProvider を参照)。

System.Windows.Automation.TextPatternIdentifiers Class

テキスト プロバイダの識別子として使用される値を格納します (TextPatternIdentifiers を参照)。

セキュリティ

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

  • Microsoft UI オートメーション テキスト プロバイダは読み取り専用のインターフェイスを提供し、コントロール内の既存のテキストを変更する機能は提供しません。

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

  • UI オートメーション プロバイダの開発者は、Microsoft UI オートメーションを通じてコントロールで公開することを選択したすべての情報は基本的にパブリックであり、他のコードから完全にアクセス可能であることを認識する必要があります。Microsoft UI オートメーションは、どの UI オートメーション クライアントの信頼性も確認しないため、UI オートメーション プロバイダは、保護されているコンテンツや機密テキスト情報 (パスワード フィールドなど) は公開しないようにする必要があります。

  • Windows Vista でのセキュリティに関する最も大きな変更の 1 つは、最小特権 (または制限付き) ユーザー アカウント (LUA) やユーザー インターフェイス特権の分離 (UIPI) などのテクノロジを含む、広い意味で "セキュリティで保護された入力" と呼ばれるものです。

    • UIPI は、1 つのプログラムがより "特権的な" 別のプログラムを制御または監視 (あるいはその両方) するのを回避し、ユーザー入力になりすますプロセス間ウィンドウ メッセージ攻撃を回避します。

    • LUA は、管理者グループ内のユーザーによって実行されているアプリケーションの特権に、制限を設定します。アプリケーションには必ずしも管理者特権は必要ではなく、必要最小限の特権で実行されます。そのため、LUA シナリオにはいくつかの制限が適用されることがあります。特に注意する必要があるのは、文字列の切り捨て (TextPattern 文字列を含む) です。管理者レベルのアプリケーションから取得される文字列のサイズを制限することが必要になる場合があるため、アプリケーションを無効にする時点まではメモリの割り当てを要求されません。

パフォーマンス

TextPattern は、その多くの機能についてプロセス間呼び出しに依存するため、コンテンツの処理時にパフォーマンスを向上させるためのキャッシュ機構はありません。これは、GetCachedPattern メソッドまたは TryGetCachedPattern メソッドを使用してアクセス可能な、Microsoft UI オートメーション内の他のコントロール パターンとは異なります。

パフォーマンスを向上させる 1 つの方法は、UI オートメーション クライアントが GetText を使用して、テキストの中規模サイズのブロックを取得するようにすることです。たとえば、GetText(1) を呼び出すと文字ごとにプロセス間ヒットが発生するのに対して、GetText(-1) では 1 回の呼び出しでプロセス間ヒットが 1 つ発生しますが、テキスト プロバイダのサイズに応じて遅延が大きくなることがあります。

TextPattern の用語

  • 属性
    テキスト範囲の書式設定特性 (IsItalicAttributeFontNameAttribute など)。

  • 低次元テキスト範囲
    低次元テキスト範囲は、空または 0 文字のテキスト範囲です。TestPattern コントロール パターンの観点からは、テキスト挿入ポイント (システム キャレット) は低次元テキスト範囲と見なされます。テキストが選択されていない場合、GetSelection はテキスト挿入ポイントにある低次元テキスト範囲を返し、RangeFromPoint は、その始点として低次元テキスト範囲を返します。RangeFromChildGetVisibleRanges は、特定の条件を満たすテキスト範囲をテキスト プロバイダが見つけることができない場合に、低次元テキスト範囲を返す場合があります。この低次元テキスト範囲は、テキスト プロバイダ内の始点として使用できます。FindText および FindAttribute は、検出された範囲と低次元テキスト範囲を区別するために、null 参照 (Microsoft Visual Basic .NET では Nothing) を返します。

  • 埋め込みオブジェクト
    UI オートメーション テキスト モデルには、2 種類の埋め込みオブジェクトがあります。埋め込みオブジェクトは、ハイパーリンクやテーブルなどのテキストベースのコンテンツ要素と、イメージやボタンなどのコントロール要素で構成されます。詳細については、「UI オートメーションを使用した、埋め込みオブジェクトへのアクセス」を参照してください。

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

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

  • TextRange
    関連付けられたすべての属性と機能を含む、テキスト コンテナ内の始点と終点を持つテキストの範囲の表現。

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

参照

処理手順

UI オートメーションにおけるキャッシュの使用

UI オートメーション プロバイダでのコントロール パターンのサポート

概念

クライアントの UI オートメーション コントロール パターン

UI オートメーション コントロール パターンの概要

UI オートメーション ツリーの概要

UI オートメーション クライアントのコントロール パターン マッピング

その他の技術情報

Text Services Framework