UI オートメーションの概要
Note
このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、Windows Automation API の「UI オートメーション」を参照してください。
Microsoft UI オートメーションは、Windows Presentation Foundation (WPF) をサポートするすべてのオペレーティング システムで利用可能な、Microsoft Windows の新しいアクセシビリティ フレームワークです。
UI オートメーションは、デスクトップ上のほとんどのユーザー インターフェイス (UI) 要素へのプログラムによるアクセスを提供し、スクリーン リーダーなどの補助技術製品が UI に関する情報をエンド ユーザーに提供したり、標準入力方式以外の方法で UI を操作したりできるようにします。 また、UI オートメーションにより、自動テスト スクリプトが UI と対話できるようになります。
Note
UI オートメーションを使用しても、 [別のユーザーとして実行] コマンドを使用して別々のユーザーが開始したプロセス間の通信を行うことはできません。
UI オートメーション クライアント アプリケーションを作成すると、そのアプリケーションは、複数のフレームワーク上で動作することが保証されます。 UI オートメーション コアにより、UI のさまざまな部分の基になるフレームワークのあらゆる差異がマスクされます。 たとえば、WPF ボタンの Content
プロパティ、Win32 ボタンの Caption
プロパティ、HTML 画像の ALT
プロパティは、UI オートメーション ビュー内では、すべてが単一のプロパティ、つまり Name にマップされます。
UI オートメーションでは、.NET Framework を実行している、サポート対象の Windows オペレーティング システムの機能がすべて提供されます (「.NET Framework のシステム要件」または .NET Core 3.0 以降の .NET Core のバージョンを参照してください)。
UI オートメーション プロバイダーは、組み込みのブリッジ サービスを通じて、Microsoft Active Accessibility クライアント アプリケーションを一部サポートします。
プロバイダーおよびクライアント
UI オートメーションには、次の表に示す 4 つの主要なコンポーネントがあります。
コンポーネント | 説明 |
---|---|
プロバイダー API (UIAutomationProvider.dll および UIAutomationTypes.dll) | UI オートメーション プロバイダーによって実装されるインターフェイス定義のセット。UI 要素に関する情報を提供し、プログラムによる入力に応答するオブジェクトです。 |
クライアント API (UIAutomationClient.dll および UIAutomationTypes.dll) | UI オートメーションクライアント アプリケーションから、UI に関する情報を取得し、コントロールに入力を送信できるようにする各種マネージド コードのセット。 |
UiAutomationCore.dll | プロバイダーとクライアントの間の通信を処理する、基になるコード (UI オートメーション コアとも呼ばれます)。 |
UIAutomationClientsideProviders.dll | 従来の標準コントロールに使用する UI オートメーション プロバイダーのセット。 (WPF コントロールは UI オートメーションをネイティブにサポートします)。このサポートは、クライアント アプリケーションに対して自動的に有効になります。 |
ソフトウェア開発者の観点からは、UI オートメーションを使用するには、カスタム コントロール用のサポートを作成する (プロバイダー API を使用) か、または UI オートメーション コアを使用して UI 要素と通信するアプリケーションを作成する (クライアント API を使用)、という 2 つの方法があります。 主要な目的に応じて、ドキュメントの該当箇所を参照してください。 次の各セクションでは、概念の詳細と、実際的な方法について説明します。
Section | 主題 | 対象ユーザー |
---|---|---|
UI オートメーションの基礎 (このセクション) | 概念についての広範な概要。 | すべて。 |
マネージド コードの UI オートメーション プロバイダー | プロバイダー API を使用する際に役立つ概要と「方法」トピック。 | コントロールの開発者。 |
マネージド コードの UI オートメーション クライアント | クライアント API を使用する際に役立つ概要と「方法」トピック。 | クライアント アプリケーションの開発者。 |
UI オートメーション コントロール パターン | コントロール パターンをプロバイダーで実装する方法と、クライアントで使用可能な機能に関する情報。 | すべて。 |
UI オートメーション テキスト パターン | Text コントロール パターンをプロバイダーで実装する方法と、クライアントで使用可能な機能に関する情報。 | すべて。 |
UI オートメーション コントロール型 | さまざまなコントロール型でサポートされるプロパティとコントロール パターンに関する情報。 | すべて。 |
UI オートメーションの名前空間、それらの名前空間を含む DLL、およびそれらを使用する対象ユーザーを次の表に示します。
名前空間 | 参照される DLL | 対象ユーザー |
---|---|---|
System.Windows.Automation | UIAutomationClientUIAutomationTypes | UI オートメーション クライアントの開発者。AutomationElement オブジェクトの検索、UI オートメーション イベントの登録、UI オートメーションのコントロール パターンの利用の際に使用します。 |
System.Windows.Automation.Provider | UIAutomationProviderUIAutomationTypes | WPF 以外のフレームワークの UI オートメーション プロバイダーの開発者。 |
System.Windows.Automation.Text | UIAutomationClientUIAutomationTypes | WPF 以外のフレームワークで使用する UI オートメーション プロバイダーの開発者が、TextPattern コントロール パターンを実装する際に使用します。 |
System.Windows.Automation.Peers | PresentationFramework | WPF で使用する UI オートメーション プロバイダーの開発者。 |
UI オートメーション モデル
UI オートメーションにより、UI のすべての部分が AutomationElement としてクライアント アプリケーションに公開されます。 各要素は、デスクトップをルート要素とするツリー構造に格納されます。 クライアントでは、ツリーの未加工ビューを、コントロール ビューまたはコンテンツ ビューとしてフィルター処理できます。 アプリケーションでは、カスタム ビューを作成することもできます。
AutomationElement オブジェクトにより、それらが表す UI 要素の一般的なプロパティが公開されます。 これらのプロパティの 1 つにコントロール型があります。これは、その基本的な外観と機能を認識可能な単一のエンティティとして定義するもので、ボタンやチェック ボックスなどがその例です。
また、各要素は、そのコントロール型に固有のプロパティを提供するコントロール パターンも公開します。 コントロール パターンは、クライアントが要素に関するより詳細な情報を取得し、入力を提供できるようにするメソッドも公開します。
Note
コントロール型とコントロール パターンの間には、1 対 1 の対応はありせん。 1 つのコントロール パターンが複数のコントロール型でサポートされる場合もありますし、1 つのコントロールが複数のコントロール パターンをサポートし、各パターンがそのコントロールの動作の異なる側面を公開する場合もあります。 たとえば、1 つのコンボ ボックスは、少なくとも 2 つのコントロール パターンを持ちます。1 つは、それを展開して折りたたむ機能を表し、もう 1 つは、選択機構を表します。 詳しくは、「 UI Automation Control Types」をご覧ください。
また、UI オートメーションからクライアント アプリケーションに対して、イベントを通じて情報が提供されます。 WinEvents とは異なり、UI オートメーションのイベントは、ブロードキャスト機構に基づいていません。 UI オートメーション クライアントは、特定のイベント通知を登録し、特定の UI オートメーション プロパティとコントロール パターン情報を自身のイベント ハンドラーに渡すように要求することができます。 また、UI オートメーション イベントには、原因となった要素への参照が含まれています。 プロバイダーはイベントを選択的に発生させることによってパフォーマンスを向上させることができますが、クライアントがリッスンしているかどうかによって異なります