クライアント側 UI オートメーション プロバイダーの実装
Note
このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、Windows Automation API の「UI オートメーション」を参照してください。
Microsoft オペレーティング システムには、Win32、Windows フォーム、Windows Presentation Foundation (WPF) など、いくつかの異なるユーザー インターフェイス (UI) フレームワークが使用されています。 Microsoft UI オートメーションにより、UI 要素に関する情報がクライアントに公開されています。 ただし、UI オートメーション自体は、それらのフレームワークに存在する各種のコントロールや、それらから情報を抽出するために必要な手法を認識しているわけではありません。 その代わりに、このタスクをプロバイダーと呼ばれるオブジェクトに任せます。 プロバイダーは、特定のコントロールから情報を抽出し、その情報を UI オートメーションに渡します。次に UI オートメーションが、その情報を一貫性のある方法でクライアントに提示します。
プロバイダーは、サーバー側とクライアント側のどちらにも配置できます。 サーバー側プロバイダーは、コントロール自体によって実装されます。 UI オートメーションを念頭に置いて作成されたサードパーティーのコントロールと同様に、WPF 要素にはプロバイダーが実装されています。
ただし、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 つのパラメーターは省略できます。 クライアントでは、異なるアプリケーションに対して異なるプロバイダーを使用する必要がある場合、ターゲット アプリケーションのイメージ名を指定することができます。 たとえば、クライアントは、Multiple View パターンをサポートする既知のアプリケーションの Win32 リスト ビュー コントロールに対して、あるプロバイダーを使用し、そのパターンをサポートしない別の既知のアプリケーションの同様のコントロールに対して別のプロバイダーを使用できます。