Server-Side UI オートメーション プロバイダーを公開する方法

このトピックには、カスタム コントロールのサーバー側の Microsoft UI オートメーション プロバイダーを公開する方法を示すコード例が含まれています。

Microsoft UI オートメーション は、プロバイダー アプリケーションにWM_GETOBJECT メッセージを送信して、プロバイダーでサポートされているアクセス可能なオブジェクトに関する情報を取得します。 UI オートメーションは、クライアントがIUIAutomation::ElementFromHandleElementFromPointGetFocusedElement を呼び出すとき、およびクライアントが登録したイベントを処理するときに、WM_GETOBJECTを送信します。

プロバイダーは、WM_GETOBJECT メッセージを受信すると、lParam パラメーターが UiaRootObjectId と等しいかどうかをチェックする必要があります。 その場合、プロバイダーは オブジェクトの IRawElementProviderSimple インターフェイスを返す必要があります。 プロバイダーは、 UiaReturnRawElementProvider 関数を呼び出してインターフェイスを返します。

次の例では、 WM_GETOBJECTに応答する方法を示します。

    // Expose the custom button's server-side provider to UI Automation.
    case WM_GETOBJECT:
        {
            // If lParam matches UiaRootObjectId, return IRawElementProviderSimple.
            if (static_cast<long>(lParam) == static_cast<long>(UiaRootObjectId))
            {
                // Retrieve the pointer to the custom button object from the
                // window data.
                CustomButton* pControl = reinterpret_cast<CustomButton*>(
                    GetWindowLongPtr(hwnd, GWLP_USERDATA));

                // Call an application-defined method to get the
                // IRawElementProviderSimple pointer.
                IRawElementProviderSimple* pRootProvider = 
                    pControl->GetUIAutomationProvider(hwnd);

                // Return the IRawElementProviderSimple pointer to UI Automation.
                return UiaReturnRawElementProvider(hwnd, wParam, lParam, 
                    pRootProvider);
            }
            return 0;
        }

概念

Server-Side UI オートメーション プロバイダーの実装

WM_GETOBJECT メッセージ

UI オートメーション プロバイダーの使い方に関するトピック