クライアント側 UI オートメーション プロバイダの実装
更新 : 2007 年 11 月
Microsoft のオペレーティング システムでは、Win32、Windows フォーム、Windows Presentation Foundation (WPF) など、いくつかの異なるユーザー インターフェイス (UI) フレームワークが使用されています。Microsoft UI オートメーションは、UI 要素に関する情報をクライアントに公開します。ただし、UI オートメーション自体は、それらのフレームワークに存在する各種のコントロールや、それらから情報を抽出するために必要な手法を認識しているわけではありません。その代わりに、このタスクをプロバイダと呼ばれるオブジェクトに任せます。プロバイダは、特定のコントロールから情報を抽出し、その情報を UI オートメーションに渡します。次に UI オートメーションが、その情報を一貫性のある方法でクライアントに提示します。
プロバイダは、サーバー側とクライアント側のどちらにも配置できます。サーバー側プロバイダは、コントロール自体によって実装されます。WPF 要素は、UI オートメーションで作成されたすべてのサードパーティ コントロールを考慮してプロバイダを実装します。
ただし、Win32 や Windows フォームに含まれているコントロールなどの比較的古いコントロールは、UI オートメーションを直接サポートしていません。これらのコントロールは、代わりにクライアント プロセス内のプロバイダによって処理され、プロセス間通信を使用して、たとえば、コントロール間でのウィンドウ メッセージを監視することで、コントロールに関する情報を取得します。このようなクライアント側プロバイダは、プロキシと呼ばれることがあります。
Windows Vista には、Win32 および Windows フォームの標準のコントロール用のプロバイダが用意されています。さらに、サーバー側プロバイダやプロキシで処理されないコントロールでも、Microsoft Active Accessibility が実装されているコントロールに対しては、代替プロバイダが UI オートメーションの部分的なサポートを提供します。これらすべてのプロバイダは、自動的に読み込まれ、クライアント アプリケーションから使用できるようになります。
Win32 および Windows フォームのコントロールのサポートの詳細については、「UI オートメーションによる標準コントロールのサポート」を参照してください。
アプリケーションが他のクライアント側プロバイダを登録することもできます。
このトピックには次のセクションが含まれています。
- クライアント側プロバイダを配布する
- クライアント側プロバイダを登録および構成する
- 関連トピック
クライアント側プロバイダを配布する
UI オートメーションでは、クライアント側プロバイダがマネージ コード アセンブリ内に見つかることを前提としています。このアセンブリ内の名前空間は、アセンブリと同じ名前を持つ必要があります。たとえば、ContosoProxies.dll というアセンブリには、ContosoProxies という名前空間が含まれます。その名前空間内に、UIAutomationClientSideProviders クラスを作成します。静的 ClientSideProviderDescriptionTable フィールドの実装内に、プロバイダを記述した ClientSideProviderDescription 構造体の配列を作成します。
クライアント側プロバイダを登録および構成する
ダイナミック リンク ライブラリ (DLL) 内のクライアント側プロバイダは、RegisterClientSideProviderAssembly を呼び出すことで読み込まれます。クライアント アプリケーションでは、プロバイダを利用するために、それ以上のアクションは必要ありません。
クライアント独自のコードで実装されたプロバイダは、RegisterClientSideProviders を使用して登録されます。このメソッドは引数として、ClientSideProviderDescription 構造体の配列を受け取ります。各構造体では、次のプロパティが指定されます。
プロバイダ オブジェクトを作成するコールバック関数。
プロバイダが使用されるコントロールのクラス名。
プロバイダが使用されるアプリケーションのイメージ名 (通常は実行可能ファイルの完全名)。
クラス名と、ターゲット アプリケーションで検出されたウィンドウ クラスを照合する方法を制御するフラグ。
最後の 2 つのパラメータは省略できます。クライアントでは、異なるアプリケーションに対して異なるプロバイダを使用する必要がある場合、ターゲット アプリケーションのイメージ名を指定することができます。たとえば、クライアントは、複数のビュー パターンをサポートする既知のアプリケーションの Win32 リスト ビュー コントロールに対して 1 つのプロバイダを使用し、そのパターンをサポートしない別の既知のアプリケーションの同様のコントロールに対して別のプロバイダを使用できます。