Поделиться через


Как обеспечить видимость поставщика автоматизации пользовательского интерфейса Server-Side

В этом разделе содержится пример кода, показывающий, как предоставить доступ к серверному поставщику Microsoft UI Automation для самодельного элемента управления.

Служба автоматизации пользовательского интерфейса Майкрософт отправляет WM_GETOBJECT сообщение приложению поставщика, чтобы получить сведения о доступном объекте, поддерживаемом поставщиком. Служба автоматизации пользовательского интерфейса отправляет WM_GETOBJECT при вызове клиентом IUIAutomation::ElementFromHandle, ElementFromPointи GetFocusedElement, а также при обработке событий, для которых зарегистрирован клиент.

Когда поставщик получает сообщение 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

Темы How-To для поставщиков автоматизации пользовательского интерфейса