Share via


Microsoft Active Accessibility と UI オートメーションの比較

Windows Automation API は、Microsoft Active Accessibility と Microsoft UI オートメーションという 2 つのテクノロジで構成されています。 Microsoft Active Accessibility は、Windows 95 のプラットフォーム アドインとして導入されたレガシ アクセシビリティ テクノロジですが、UI オートメーションは、Microsoft Active Accessibility に固有の制限を克服する、より新しく、より優れたテクノロジです。

このトピックでは、Microsoft Active Accessibility と UI オートメーションの主な違いをまとめます。 次のセクションが含まれます。

基本的な設計原則

Microsoft Active Accessibility と UI オートメーションは 2 つの異なるテクノロジですが、基本的な設計原則は似ています。 両方のテクノロジの目的は、Windows アプリケーションで使用される UI 要素に関する豊富な情報を公開することです。 アクセシビリティ ツールの開発者は、この情報を使用して、Windows 上で実行されているアプリケーションが視覚、聴覚、または運動に障碍のあるユーザーにとって、よりアクセスしやすいソフトウェアを作成できます。

Microsoft Active Accessibility と UI オートメーションの両方で、デスクトップに根ざした階層ツリーとして UI オブジェクト モデルが公開されています。 Microsoft Active Accessibility は、個々の UI 要素を "アクセス可能なオブジェクト" として表し、UI オートメーションはそれらを "オートメーション要素" として表します。 どちらも、ユーザー補助ツールまたはソフトウェア オートメーション プログラムを "クライアント" として表します。 ただし、Microsoft Active Accessibility では、ユーザー補助用の UI を提供するアプリケーションまたはコントロールを "サーバー" と呼びますが、UI オートメーションではこれを "プロバイダー" と呼びます。

プロパティとコントロール パターン

Microsoft Active Accessibility は、固定の小さなプロパティ セットを持つ単一のコンポーネント オブジェクト モデル (COM) インターフェイスを提供します。 UI オートメーションは、より豊富なプロパティセットと、Microsoft Active Accessibility ではできない方法でアクセス可能なオブジェクトを操作するための "コントロール パターン" と呼ばれる拡張インターフェイスのセットを提供します。

詳細については、「UI オートメーション プロパティの概要」および 「UI オートメーション コントロール パターンの概要」を参照してください。

MSAA ロールと UI オートメーション コントロール パターン

Microsoft は、Windows 95 のリリースと同時に Microsoft Active Accessibility オブジェクト モデルを設計しました。 モデルは 10 年前に定義された "ロール" に基づいており、新しい UI 動作をサポートしたり、2 つ以上のロールをマージしたりすることはできません。 たとえば、支援技術が複雑な Web コンテンツに対処するのに役立つテキスト オブジェクト モデルはありません。 UI オートメーションは、オブジェクトが複数のロールをサポートできるようにするコントロール パターンを導入して、これらの制限を克服し、UI オートメーション Text コントロール パターンは本格的なテキスト オブジェクト モデルを提供します。

オブジェクト モデルのナビゲーション

Microsoft Active Accessibility のもう 1 つの制限事項には、オブジェクト モデルの移動が含まれます。 Microsoft Active Accessibility は、UI をアクセス可能なオブジェクトの階層として表します。 クライアントは、アクセス可能なオブジェクトから使用できるインターフェイスとメソッドを使用して、アクセス可能なオブジェクト間を移動します。 サーバーは、IAccessible インターフェイスのプロパティまたは標準の IEnumVARIANT COM インターフェイスを使用して、アクセス可能なオブジェクトの子を公開できます。 ただし、クライアントは、任意のサーバーの両方の方法に対処できる必要があります。 このあいまいさは、クライアント実装者にとっては作業が増え、サーバー実装者にとっては、アクセス可能なオブジェクト モデルが壊れることを意味します。

UI オートメーションは、UI をオートメーション要素の階層ツリーとして表し、ツリー内を移動するための 1 つのインターフェイスを提供します。 クライアントは、スコープ設定とフィルター処理によって、ツリー内の要素のビューをカスタマイズできます。

オブジェクト モデルの拡張性

Microsoft Active Accessibility のプロパティと関数は、IAccessible COM インターフェイスの仕様を破損または変更しないと拡張できません。 その結果、オブジェクト モデルを介して新しいコントロールの動作を公開することができず、静的になる傾向があります。

UI オートメーションでは、新しい UI 要素が作成されると、アプリケーション開発者はカスタム プロパティ、コントロール パターン、イベントを導入して新しい要素を記述できます。 詳細については、「カスタム プロパティ、イベント、およびコントロール パターン」を参照してください。

MSAAからの切り替え

Windows Automation API フレームワークでは、Microsoft Active Accessibility サーバーから UI オートメーション プロバイダーへの切り替えがサポートされています。 IAccessibleEx インターフェイスを使用すると、実装全体を書き直す必要なく、レガシ Microsoft Active Accessibility サーバーに特定のUI オートメーションプロパティとコントロール パターンを追加できます。 また、IAccessibleEx インターフェイスを使用すると、インプロセスの Microsoft Active Accessibility クライアントは、UI オートメーション クライアント インターフェイス経由ではなく、UI オートメーション プロバイダー インターフェイスに直接アクセスできます。 詳細については、「IAccessibleEx インターフェイス」を参照してください。

Microsoft Active Accessibility、UI オートメーション、または IAccessibleEx の選択

このセクションは、支援技術製品を実装したり、アプリケーションを支援技術製品にアクセスできるようにするために使用する Windows Automation API ソリューションを決定したりするのに役立ちます。

新しいアプリケーションとコントロール

新しいアプリケーションまたはコントロールを開発する場合は、UI オートメーションを使用することをお勧めします。 Microsoft Active Accessibility の実装は短期的には簡単ですが、このテクノロジに固有の制限事項 (オブジェクト モデルが古い、新しい UI の動作をサポートできない、ロールをマージできないなど) のため、長期的にはより困難でコストがかかります。 これらの制限は、新しいコントロールを導入するときに特に明らかになります。

UI オートメーション オブジェクト モデルは使いやすく、Microsoft Active Accessibility よりも柔軟です。 UI オートメーション要素はユーザー インターフェイスの進化を反映しており、開発者はカスタム UI オートメーション コントロール パターン、プロパティ、イベントを定義できます。

Microsoft Active Accessibility では、プロセスが不足しているクライアントの実行速度が遅くなる傾向があります。 パフォーマンスを向上させるために、アクセシビリティ ツール プログラムの開発者は、多くの場合、ターゲット アプリケーション プロセスでプログラムをフックして実行することを選択しますが、これは非常に困難でリスクの高いアプローチです。 UI オートメーションはアウトプロセス クライアントの実装がはるかに簡単で、パフォーマンスと信頼性が大幅に向上します。

既存の Microsoft Active Accessibility の実装

Microsoft Active Accessibility に基づく既存のアプリケーションまたはコントロールを更新する場合は、IAccessibleEx インターフェイスを実装してUI オートメーションのサポートを追加することを検討してください。 まず、お使いのアプリケーションまたはコントロールが次の要件を満たしていることを確認してください。

  • ベースラインの Microsoft Active Accessibility サーバーのアクセス可能なオブジェクトの階層は、適切に整理され、エラーが発生しないものである必要があります。 IAccessibleEx では、既存のアクセス可能なオブジェクトの階層に関する問題を解決できません。
  • IAccessibleEx の実装は、Microsoft Active Accessibility 仕様と UI オートメーション仕様の両方に準拠している必要があります。 Microsoft には、両方の仕様への準拠を検証するための一連のツールが用意されています。 詳細については、「アクセシビリティのテスト」を参照してください。

これらの要件のいずれかが満たされていない場合は、ネイティブにUI オートメーションを実装することを検討してください。 必要に応じて、下位互換性のためにレガシ Microsoft Active Accessibility サーバーの実装を維持できます。 UI オートメーション クライアントの観点からは、UI オートメーション プロバイダーと、IAccessibleEx が正しく実装されている Microsoft Active Accessibility サーバーには違いはありません。

詳細については、「IAccessibleEx インターフェイス」を参照してください。

Windows Automation API の概要

Microsoft Active Accessibility

UI 自動化

IAccessibleEx インターフェイス