WM_GETOBJECT メッセージの処理
Microsoft Active Accessibility と Microsoft の両方UI オートメーションサーバーまたはプロバイダー アプリケーションにWM_GETOBJECT メッセージを送信して、サーバーまたはプロバイダーでサポートされているアクセシビリティ対応オブジェクトに関する情報を取得します。 クライアントは WM_GETOBJECT を直接送信することはありません。 代わりに、Microsoft Active Accessibility は、クライアントが AccessibleObjectFromPoint、AccessibleObjectFromEvent、および AccessibleObjectFromWindow 関数を呼び出すときに、このメッセージを送信します。 UI オートメーションは、クライアントがIUIAutomation::ElementFromHandle、ElementFromPoint、GetFocusedElement を呼び出すとき、およびクライアントが登録したイベントを処理するときに、WM_GETOBJECTを送信します。
Microsoft Active Accessibility または UI オートメーション では、WM_GETOBJECT メッセージでオブジェクト識別子と呼ばれる値を渡すことによって、情報が必要なオブジェクトの種類を指定します。 メッセージを受信すると、サーバーまたはプロバイダーはオブジェクト識別子を調べて、メッセージに応答する方法を決定します。 応答は、受信側のアプリケーションが、指定したオブジェクトに対して Microsoft Active Accessibility (サーバー)、UI オートメーション (プロバイダー)、またはどちらも実装していないかどうかによって異なります。
- 受信側のアプリケーションが Microsoft Active Accessibility サーバーであり、 WM_GETOBJECT メッセージに OBJID_CLIENT のオブジェクト識別子が含まれている場合、サーバーは、オブジェクトの IAccessible インターフェイスを LresultFromObject 関数に渡すことによって取得した値を返す必要があります。
- 受信側のアプリケーションがUI オートメーション プロバイダーであり、オブジェクト識別子が UiaRootObjectId の場合、プロバイダーはオブジェクトの IRawElementProviderSimple インターフェイスを返す必要があります。 プロバイダーは、 UiaReturnRawElementProvider 関数を呼び出してインターフェイスを取得します。
- 受信側のアプリケーションが Microsoft Active Accessibility もUI オートメーションも実装していない場合は、WM_GETOBJECT メッセージを DefWindowProc 関数に渡す必要があります。 メッセージを渡すと、アクセシビリティ フレームワークは、指定したオブジェクトに対してプロキシを使用できるかどうかを判断できます。
- オブジェクト識別子が OBJID_CLIENT でも UiaRootObjectId でもない場合、受信側のアプリケーションは 、WM_GETOBJECT メッセージを DefWindowProc 関数に渡す必要があります。 メッセージを渡すと、アクセシビリティ フレームワークは標準 UI 要素に既定のプロバイダーを使用できます。
Microsoft Active Accessibility とUI オートメーションは、WM_GETOBJECT メッセージ内のカスタム オブジェクト識別子を渡して、サーバーまたはプロバイダーからアプリケーション定義の値またはオブジェクトを取得できます。 OBJID_NATIVEOMまたはOBJID_QUERYCLASSNAMEIDX オブジェクト識別子を使用して、ネイティブ オブジェクト モデル インターフェイスを取得したり、Oleacc.dllでサポートされている特定のプロキシ オブジェクトを要求することができます。
OBJID_CLIENTオブジェクト識別子と UiaRootObjectId オブジェクト識別子の両方を処理することで、Microsoft Active Accessibility サーバーの実装を、UI オートメーション プロバイダーの実装と共に共存させることができます。 共通コントロール ライブラリ (ComCtl32.dll) によって実装されるほとんどの標準の Windows コントロールと共通コントロールは、Microsoft Active Accessibility またはUI オートメーションを実装していないため、これらのコントロールは通常、WM_GETOBJECT メッセージを処理しません。 代わりに、Microsoft Active Accessibility または UI オートメーション フレームワークは、プロキシ オブジェクトが特定の UI 要素で使用できるかどうかを確認します。 それ以外の場合は、ホスト ウィンドウ オブジェクトの既定のプロキシ オブジェクトが提供されます。