次の方法で共有


UI オートメーション と Active Accessibility

Microsoft Active Accessibility は、Windows 95 で導入されたレガシー API であり、Windows アプリケーションをアクセス可能にするために設計されました。 Microsoft UI Automation は、Windows の新しいアクセシビリティ モデルであり、支援技術製品と自動テスト ツールのニーズに対応することを目的としています。 UI オートメーションは、Microsoft Active Accessibility に比べて多くの点で改善されています。 このトピックでは、2 つのテクノロジの違いについて説明します。

このトピックは、次のセクションで構成されています。

プログラミング言語

Microsoft Active Accessibility は、デュアル インターフェイスをサポートするコンポーネント オブジェクト モデル (COM) に基づいているため、C/C++ およびスクリプト言語でプログラム可能です。

UI オートメーションが導入されたとき、クライアント API はマネージ コードに制限されていましたが、プロバイダー API にはマネージ実装とアンマネージ実装の両方が含まれていました。 Windows 7 では、C/C++ で UI オートメーション クライアント アプリケーションを簡単にプログラミングできるように、新しい COM ベースのクライアント API が導入されました。

サーバーとクライアント

Microsoft Active Accessibility では、サーバーとクライアントは主に IAccessible インターフェイスのサーバー実装を介して直接通信します。

UI オートメーションでは、コア サービスはサーバー (プロバイダー) とクライアントの間に存在します。 コア サービスは、プロバイダーによって実装されたインターフェイスを呼び出し、UI 要素の一意のランタイム識別子を生成するなどの追加サービスを提供します。 クライアント アプリケーションは、 CUIAutomation オブジェクトを作成することによって、このコア サービスにアクセスします。 このオブジェクトは、プロバイダー インターフェイスとは別のクライアント インターフェイスのセットをサポートします。 詳細については、「CUIAutomation オブジェクトの作成」を参照してください。

UI オートメーション プロバイダーは Microsoft Active Accessibility クライアントに情報を提供でき、Microsoft Active Accessibility サーバーは UI オートメーション クライアント アプリケーションに情報を提供できます。 ただし、Microsoft Active Accessibility は UI Automation ほど多くの情報を公開しないため、2 つのモデルは完全に互換性がありません。

UI 要素

Microsoft Active Accessibility は、UI 要素を子識別子とペアになった IAccessible インターフェイスとして提示します。 2 つの IAccessible ポインターを比較して、同じ要素を参照しているかどうかを判断するのは困難です。

UI オートメーションでは、すべての要素は、 IUIAutomationElement インターフェイスをクライアントに公開するオブジェクトとして表されます。 要素は、 IUIAutomationElement::GetRuntimeId を使用して取得されるランタイム識別子によって比較できます。

ツリー ビューとナビゲーション

画面上の UI 要素は、デスクトップをルート、アプリケーション ウィンドウを直接の子、アプリケーション内の要素をさらに子孫とするツリー構造として表示できます。

Microsoft Active Accessibility では、エンド ユーザーにとって無関係な多くの UI 要素がツリー構造で公開されます。 クライアント アプリケーションは、ツリー内のすべての要素を調べて、どの要素が意味があるかを判断する必要があります。

UI オートメーション クライアント アプリケーションは、フィルタリングしたビューを使用して UI を確認します。 ビューには、ユーザーに情報を提供する要素、またはユーザーが操作できる要素のみが含まれます。 コントロール要素のみとコンテンツ要素のみを含む定義済みビューが使用可能であり、クライアント アプリケーションはカスタム ビューを定義できます。 UI オートメーションを使用すると、ユーザーに対して UI を説明しやすくなり、ユーザーがアプリケーションと対話しやすくなります。

Microsoft Active Accessibility では、要素間のナビゲーションは、空間的なもの (画面の左側にある要素に移動するなど)、論理的なもの (次のメニュー項目に移動する、ダイアログ ボックスのタブ オーダーの次の項目に移動するなど)、または階層的なもの (コンテナーの最初の子要素に移動する、子要素から親要素に移動するなど) になります。 階層ナビゲーションは、子要素が必ずしも IAccessible を実装するオブジェクトではないため複雑になります。

UI オートメーションでは、すべての UI 要素は、 IUIAutomationElement インターフェイスを公開し、同じ基本機能をサポートする COM オブジェクトです。 プロバイダーの観点から見ると、COM オブジェクトは IRawElementProviderSimpleから継承されたインターフェイスを実装します。 ナビゲーションは主に階層的であり、つまり親から子へ、そして兄弟から次の兄弟へと行われます。 ただし、兄弟間のナビゲーションには、タブ順序に従う可能性があるため、論理的な要素があります。 クライアントは、 IUIAutomationTreeWalker を使用することで、ツリーの任意のフィルターされたビューを使用して、任意の開始点から移動できます。 クライアントは、 IUIAutomationElement::FindFirstIUIAutomationElement::FindAll を使用して、特定の子または子孫に移動することもできます。 たとえば、指定されたコントロール パターンをサポートするダイアログ ボックス内のすべての要素を簡単に取得できます。

UI オートメーションのナビゲーションは、Microsoft Active Accessibility よりも一貫性があります。 ドロップダウン リストやポップアップ ウィンドウなどの一部の要素は、Microsoft Active Accessibility ツリーに 2 回表示され、それらの要素から移動すると予期しない結果が生じる可能性があります。 Rebar コントロールに Microsoft Active Accessibility を適切に実装するのは困難です。 UI オートメーションにより、ウィンドウの所有権によって課せられた階層に関係なく、要素をツリー内の任意の場所に配置できるように、親の再設定と再配置が可能になります。

役割とコントロール型

Microsoft Active Accessibility は、accRole プロパティ (IAccessible::get_accRole) を使用して、 ROLE_SYSTEM_SLIDERROLE_SYSTEM_MENUITEM など、UI 内の要素ロールの説明を取得します。 要素の役割は、要素の機能を表す主要な鍵になります。 コントロールとの対話は、 IAccessible::accSelectIAccessible::accDoDefaultAction などの固定メソッドを使用して実現されます。 クライアント アプリケーションと UI 間の対話は、 IAccessibleを通じて実行できるものに制限されます。

対照的に、UI オートメーションは、 IUIAutomationElement::CurrentControlType (または IUIAutomationElement::CachedControlType) プロパティによって記述される要素のコントロール タイプを、その予想される機能から切り離します。 機能は、特殊なインターフェイスの実装を通じてプロバイダーによってサポートされる、コントロール パターンによって決定されます。 コントロール パターンを組み合わせることで、特定の UI 要素でサポートされる機能の完全なセットを記述できます。 一部のプロバイダーでは、特定の制御パターンをサポートする必要があります。 たとえば、チェック ボックスのプロバイダーは、 Toggle コントロール パターンをサポートする必要があります。 他のプロバイダーは、制御パターンのセットの 1 つ以上をサポートする必要があります。 たとえば、ボタンは、Toggle または Invoke コントロール パターンのいずれかをサポートする必要があります。 さらに、制御パターンをサポートしないものもあります。 たとえば、移動、サイズ変更、またはドッキングできないペインにはコントロール パターンがありません。

UI オートメーションは、 UIA_CustomControlTypeId 定数によって識別され、IUIAutomationElement::CurrentLocalizedControlType (または IUIAutomationElement::CachedLocalizedControlType) プロパティによって記述できるカスタム コントロールをサポートします。

次の表は、Microsoft Active Accessibility オブジェクト ロール を UI Automation コントロール タイプにマッピングします。

Active Accessibility の役割 UI オートメーション コントロール型
ROLE_SYSTEM_PUSHBUTTON Button
ROLE_SYSTEM_CLIENT Calendar
ROLE_SYSTEM_CHECKBUTTON CheckBox
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT カスタム コントロール タイプを参照してください。
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Document
ROLE_SYSTEM_TEXT 編集
ROLE_SYSTEM_GROUPING グループ
ROLE_SYSTEM_LIST ヘッダー
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK Hyperlink
ROLE_SYSTEM_GRAPHIC イメージ
ROLE_SYSTEM_LIST List
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP メニュー
ROLE_SYSTEM_MENUBAR MenuBar
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE ペイン
ROLE_SYSTEM_PROGRESSBAR ProgressBar
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR ScrollBar
ROLE_SYSTEM_SEPARATOR Separator
ROLE_SYSTEM_SLIDER Slider
ROLE_SYSTEM_SPINBUTTON スピン ボタン
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR StatusBar
ROLE_SYSTEM_PAGETABLIST タブ
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE Table
ROLE_SYSTEM_STATICTEXT テキスト
ROLE_SYSTEM_INDICATOR Thumb
ROLE_SYSTEM_TITLEBAR TitleBar
ROLE_SYSTEM_TOOLBAR ToolBar
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE ツリー
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW ウィンドウ

 

状態とプロパティ

Microsoft Active Accessibility 要素は、共通のプロパティ セットをサポートします。 accState などの一部のプロパティでは、要素の役割に応じて異なる条件を記述する必要があります。 サーバーは、要素に関連しないプロパティであっても、プロパティを返す IAccessible のすべてのメソッドを実装する必要があります。

UI オートメーションは追加のプロパティを定義します。その一部は Microsoft Active Accessibility の状態に対応します。 一部のプロパティはすべての要素に共通ですが、その他のプロパティはコントロール タイプとコントロール パターンに固有です。 UI オートメーション プロバイダーは、無関係なプロパティを実装する必要はありませんが、サポートしていないプロパティに対して null 値を返すことができます。 UI オートメーション コア サービスは、既定のウィンドウ プロバイダーからいくつかのプロパティを取得でき、これらはプロバイダーによって明示的に実装されたプロパティと統合されます。

UI オートメーションでは、さらに多くのプロパティがサポートされるだけでなく、プロパティをキャッシュできるようにすることでパフォーマンスが向上します。

次の表は、2 つのモデルのいくつかのプロパティ間の対応を示しています。 UI オートメーション プロパティ ID の説明については、「オートメーション要素プロパティ ID」を参照してください。

Active Accessibility プロパティ アクセサー UI オートメーションのプロパティ ID 解説
get_accKeyboardShortcut UIA_AccessKeyPropertyId または UIA_AcceleratorKeyPropertyId UIA_AccessKeyPropertyId の両方が存在する場合は優先されます。
get_accName UIA_NamePropertyId
get_accRole UIA_ControlTypePropertyId ロールとコントロール タイプのマッピングについては、前の表を参照してください。
get_accValue UIA_ValueValuePropertyId または UIA_RangeValueValuePropertyId IUIAutomationValuePattern または IUIAutomationRangeValuePattern をサポートするコントロール タイプに対してのみ有効です。 範囲値は、Microsoft Active Accessibility の動作と一致するように 0 ~ 100 に正規化されます。 値は文字列として表されます。
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription サポートされていません。 accDescription は Microsoft Active Accessibility で明確な仕様がなかったため、サーバーはこのプロパティにさまざまな情報を配置していました。
get_accHelpTopic サポートされていません。

 

次の表は、Microsoft Active Accessibility オブジェクト状態定数に対応する UI オートメーション プロパティ ID を示しています。

Active Accessibility の状態 UI オートメーションのプロパティ WinEvent の状態変更をトリガーしますか?
STATE_SYSTEM_CHECKED チェックボックスのUIA_ToggleToggleStatePropertyIdラジオ ボタンの UIA_SelectionItemIsSelectedPropertyId
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (値 = ExpandCollapseState_Collapsed).
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (値 = ExpandCollapseState_Expanded または ExpandCollapseState_PartiallyExpanded)。
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId. N
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. N
STATE_SYSTEM_HASPOPUP メニュー項目の UIA_ExpandCollapseExpandCollapseStatePropertyId N
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (値 = True かつ IUIAutomationElement::GetClickablePoint が失敗します)。 N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (値 = UIA_HyperlinkControlTypeId). N
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (値 = ToggleState_Indeterminate. N
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId. N
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId. N
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId. N
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId. N
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyIdUIA_ValueIsReadOnlyPropertyId. N
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId . N
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId. N
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId. N
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId.

 

プロパティ ID の完全なリストについては、 プロパティ識別子を参照してください。

Events

Microsoft Active Accessibility とは異なり、UI Automation のイベント メカニズムは、ウィンドウ ハンドルに密接に関連付けられている Windows イベント ルーティングに依存せず、クライアント アプリケーションでフックを設定する必要もありません。 イベントへのサブスクリプションは、特定のイベントだけでなく、ツリーの特定の部分に合わせて微調整できます。 プロバイダーは、どのイベントがリッスンされているかを追跡することで、発生するイベントを微調整することもできます。

また、イベントを発生させる要素はイベント コールバックに直接渡されるため、クライアントがイベントを発生させる要素を取得することも簡単になります。 クライアントがイベントをサブスクライブしたときにキャッシュ要求が提供された場合、要素のプロパティは自動的にプリフェッチされます。

次の表は、Microsoft Active Accessibility イベント定数 と UI オートメーション イベント ID の対応を示しています。

WinEvent UI オートメーション イベント ID
EVENT_OBJECT_ACCELERATORCHANGE UIA_AcceleratorKeyPropertyId プロパティの変更。
EVENT_OBJECT_CONTENTSCROLLED 関連するスクロール バーのUIA_ScrollVerticalScrollPercentPropertyId または UIA_ScrollHorizo​ntalScrollPercentPropertyId プロパティが変更されます。
EVENT_OBJECT_CREATE UIA_StructureChangedEventId.
EVENT_OBJECT_DEFACTIONCHANGE 同等の対象なし。
EVENT_OBJECT_DESCRIPTIONCHANGE 正確に相当するものはありません。おそらく UIA_HelpTextPropertyId または UIA_LocalizedControlTypePropertyId プロパティの変更です。
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId の変更。
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE UIA_BoundingRectanglePropertyId プロパティの変更。
EVENT_OBJECT_NAMECHANGE UIA_NamePropertyId プロパティの変更。
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER Microsoft Active Accessibility では一貫して使用されません。 直接対応するイベントが UI オートメーションでは定義されていません。
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId.
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId.
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId.
EVENT_OBJECT_SELECTIONWITHIN 同等の対象なし。
EVENT_OBJECT_SHOW UIA_StructureChangedEventId.
EVENT_OBJECT_STATECHANGE さまざまなプロパティ変更イベント。
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyIdUIA_ValueValuePropertyId が変更されました。
EVENT_SYSTEM_ALERT 同等の対象なし。
EVENT_SYSTEM_CAPTUREEND 同等の対象なし。
EVENT_SYSTEM_CAPTURESTART 同等の対象なし。
EVENT_SYSTEM_CONTEXTHELPEND 同等の対象なし。
EVENT_SYSTEM_CONTEXTHELPSTART 同等の対象なし。
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId.
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId.
EVENT_SYSTEM_DRAGDROPEND 同等の対象なし。
EVENT_SYSTEM_DRAGDROPSTART 同等の対象なし。
EVENT_SYSTEM_FOREGROUND UIA_AutomationFocusChangedEventId.
EVENT_SYSTEM_MENUEND UIA_MenuModeEndEventId.
EVENT_SYSTEM_MENUPOPUPEND UIA_MenuClosedEventId.
EVENT_SYSTEM_MENUPOPUPSTART UIA_MenuOpenedEventId.
EVENT_SYSTEM_MENUSTART UIA_MenuModeStartEventId.
EVENT_SYSTEM_MINIMIZEEND UIA_WindowWindowVisualStatePropertyId プロパティの変更。
EVENT_SYSTEM_MINIMIZESTART UIA_WindowWindowVisualStatePropertyId プロパティの変更。
EVENT_SYSTEM_MOVESIZEEND UIA_BoundingRectanglePropertyId プロパティの変更。
EVENT_SYSTEM_MOVESIZESTART UIA_BoundingRectanglePropertyId プロパティの変更。
EVENT_SYSTEM_SCROLLINGEND UIA_ScrollVerticalScrollPercentPropertyId または UIA_ScrollHorizontalScrollPercentPropertyId プロパティの変更。
EVENT_SYSTEM_SCROLLINGSTART UIA_ScrollVerticalScrollPercentPropertyId または UIA_ScrollHorizontalScrollPercentPropertyId プロパティの変更。
EVENT_SYSTEM_SOUND 同等の対象なし。
EVENT_SYSTEM_SWITCHEND 同等のものはありませんが、 UIA_AutomationFocusChangedEventId イベントは、新しいアプリケーションがフォーカスを受け取ったことを通知します。
EVENT_SYSTEM_SWITCHSTART 同等の対象なし。
同等の対象なし。 UIA_MultipleViewCurrentViewPropertyId プロパティの変更。
同等の対象なし。 UIA_ScrollHorizo​​ntallyScrollablePropertyId プロパティの変更。
同等の対象なし。 UIA_ScrollVerticallyScrollablePropertyId プロパティの変更。
同等の対象なし。 UIA_ScrollHorizontalScrollPercentPropertyId プロパティの変更。
同等の対象なし。 UIA_ScrollVerticalScrollPercentPropertyId プロパティの変更。
同等の対象なし。 UIA_ScrollHorizontalViewSizePropertyId プロパティの変更。
同等の対象なし。 UIA_ScrollVerticalViewSizePropertyId プロパティの変更。
同等の対象なし。 UIA_ToggleToggleStatePropertyId プロパティの変更。
同等の対象なし。 UIA_WindowWindowVisualStatePropertyId プロパティの変更
同等の対象なし。 UIA_AsyncContentLoadedEventId イベント。
同等の対象なし。 UIA_ToolTipOpenedEventId イベント。

 

UI オートメーションからアクティブなアクセシビリティ プロパティとオブジェクトにアクセスする

Microsoft Active Accessibility では利用できない UI Automation の重要な機能は、単一のプロセス間操作で複数のプロパティをフェッチできることです。

既存の Microsoft Active Accessibility クライアントは、 IUIAutomationLegacyIAccessiblePattern インターフェイスを使用してこの機能を利用できます。 このインターフェイスは、UI 要素の Microsoft Active Accessibility プロパティとメソッドを公開する コントロール パターン を表します。 要素を取得するときに、アプリケーションはこのコントロール パターンとそのプロパティをキャッシュするように要求できます。

IUIAutomationLegacyIAccessiblePattern を使用すると、クライアントは IAccessible をネイティブにサポートしていない要素から Microsoft Active Accessibility プロパティを取得することもできます。

IUIAutomationLegacyIAccessiblePattern のプロパティを変更しても、UI Automation イベントは発生しません。

Active Accessibility サーバーへの UI オートメーション機能の追加

UI オートメーション ツリーの概要

UI オートメーション プロパティの概要

UI オートメーション コントロール型の概要

UI オートメーション イベントの概要

Microsoft Active Accessibility