UI オートメーション プロバイダの概要
更新 : 2007 年 11 月
UI オートメーション プロバイダとは、コントロールが UI オートメーション クライアント アプリケーションと通信するためのしくみです。一般に、ユーザー インターフェイス (UI) 内のコントロールやその他の独立した要素はそれぞれ、1 つのプロバイダによって表されます。プロバイダによって、その要素についての情報が公開されますが、クライアント アプリケーションがコントロールと対話するためのコントロール パターンを実装することもできます。
通常は、クライアント アプリケーションがプロバイダを直接操作する必要はありません。Win32、Windows フォーム、または Windows Presentation Foundation (WPF) のフレームワークを使用するアプリケーションの標準コントロールのほとんどは、自動的に UI オートメーション システムに対して公開されます。アプリケーションでカスタム コントロールを実装するときも、そのコントロールに対する UI オートメーション プロバイダを実装することが可能ですが、アクセスするための特別な手順をクライアント アプリケーション側で用意する必要はありません。
ここでは、コントロール開発者が、特に Windows フォームおよび Win32 のウィンドウ内のコントロールに対して、UI オートメーション プロバイダを実装する方法の概要について説明します。
このトピックには次のセクションが含まれています。
- プロバイダの種類
- UI オートメーション プロバイダの概念
- 関連トピック
プロバイダの種類
UI オートメーション プロバイダは、クライアント側プロバイダとサーバー側プロバイダの 2 つのカテゴリに分かれます。
クライアント側プロバイダ
クライアント側プロバイダは UI オートメーション クライアントによって実装され、UI オートメーションをサポートしていないアプリケーション、または完全にはサポートしていないアプリケーションと通信します。クライアント側プロバイダとサーバーとがプロセスの境界を越えて通信するには、通常、Windows メッセージが送受信されます。
Win32、Windows フォーム、または WPF のアプリケーションのコントロールに対する UI オートメーション プロバイダは、オペレーティング システムの一部として提供されるため、ほとんどの場合、クライアント アプリケーションは独自のプロバイダを実装する必要はありません。この概要では、これらについては詳細には説明しません。
サーバー側プロバイダ
サーバー側プロバイダは、Win32、Windows フォーム、または WPF 以外の UI フレームワークに基づくカスタム コントロールまたはアプリケーションによって実装されます。
サーバー側プロバイダとクライアント アプリケーションとがプロセスの境界を越えて通信するために、インターフェイスが UI オートメーション コア システム対して公開され、コア システムによってクライアントからの要求が処理されます。
UI オートメーション プロバイダの概念
ここでは、UI オートメーション プロバイダを実装するために理解しておく必要がある重要な概念について簡単に説明します。
要素
UI オートメーションの要素とは、UI オートメーション クライアントからアクセス可能なユーザー インターフェイス (UI) の部品です。たとえば、アプリケーション ウィンドウ、ペイン、ボタン、ツールヒント、リスト ボックス、およびリスト項目があります。
ナビゲーション
UI オートメーションの要素は、UI オートメーション ツリーとしてクライアントに公開されます。UI オートメーションは、1 つの要素から別の要素へのナビゲーションによってこのツリーを構築します。このナビゲーションは、各要素のプロバイダによって可能になります。プロバイダはそれぞれ、親、兄弟、または子をポイントします。
UI オートメーション ツリーのクライアント ビューの詳細については、「UI オートメーション ツリーの概要」を参照してください。
ビュー
クライアントが UI オートメーション ツリーを参照するときのビューは、主に次の表に示す 3 つです。
未加工ビュー |
すべての要素が含まれます。 |
コントロール ビュー |
コントロールである要素が含まれます。 |
コンテンツ ビュー |
コンテンツを持つ要素が含まれます。 |
UI オートメーション ツリーのクライアント ビューの詳細については、「UI オートメーション ツリーの概要」を参照してください。
要素がコンテンツ要素かコントロール要素かは、プロバイダ実装側で定義されます。コントロール要素は、コンテンツ要素でもあるものとそうでないものがありますが、コンテンツ要素はすべてコントロール要素です。
フレームワーク
フレームワークは、画面上の特定の領域での子コントロール、ヒット テスト、およびレンダリングを管理するコンポーネントです。たとえば、Win32 ウィンドウ (一般に HWND と呼ばれるものです) は、フレームワークとしての働きを持ち、メニュー バー、ステータス バー、ボタンなどの複数の UI オートメーション要素を格納できます。
リスト ボックスやツリー ビューなどの Win32 コンテナ コントロールは、子項目のレンダリングおよびヒット テスト実行のための独自のコードが格納されるので、フレームワークと見なされます。対照的に、WPF リスト ボックスはフレームワークではありません。レンダリングとヒット テストは、このコントロールを格納している WPF ウィンドウによって処理されるからです。
アプリケーション内の UI を構成するフレームワークの種類が、それぞれ異なっていてもかまいません。たとえば、HWND アプリケーション ウィンドウに ダイナミック HTML (DHTML) を格納し、HWND 内にコンボ ボックスなどのコンポーネントを格納することも可能です。
フラグメント
フラグメントは、特定のフレームワークからの要素のサブツリー全体を指します。サブツリーのルート ノードにある要素を、"フラグメント ルート" と呼びます。フラグメント ルートには親がありませんが、他のフレームワーク (通常は Win32 ウィンドウ (HWND)) の中でホストされます。
ホスト
各フラグメントのルート ノードは、1 つの要素 (通常は Win32 ウィンドウ (HWND)) の中でホストされている必要があります。他の要素内でホストされないデスクトップは例外です。カスタム コントロールのホストは、そのコントロール自体の HWND です。アプリケーション ウィンドウや、その他の最上位コントロールのグループを格納できるウィンドウではありません。
フラグメントのホストは、UI オートメーション サービスの提供において重要な役割を果たします。ホストによって、フラグメント ルートへのナビゲーションが可能になり、一部の既定のプロパティも設定されるので、カスタム プロバイダではこれらを実装する必要がありません。