如何公开Server-Side UI 自动化提供程序

本主题包含演示如何公开自定义控件的服务器端 Microsoft UI 自动化提供程序的示例代码。

Microsoft UI 自动化将WM_GETOBJECT消息发送到提供程序应用程序,以检索有关提供程序支持的可访问对象的信息。 当客户端调用 IUIAutomation::ElementFromHandleElementFromPointGetFocusedElement 时,以及处理客户端已注册的事件时,UI 自动化发送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 自动化提供程序的帮助主题