Manipulando a mensagem de WM_GETOBJECT
Tanto a Acessibilidade Ativa da Microsoft quanto a Microsoft Automação da Interface do Usuário enviar a mensagem de WM_GETOBJECT a um servidor ou aplicativo provedor para recuperar informações sobre um objeto acessível compatível com o servidor ou provedor. Os clientes nunca enviam WM_GETOBJECT diretamente. Em vez disso, a Acessibilidade Ativa da Microsoft envia essa mensagem quando um cliente chama as funções AccessibleObjectFromPoint, AccessibleObjectFromEvent e AccessibleObjectFromWindow . Automação da Interface do Usuário envia WM_GETOBJECT quando um cliente chama IUIAutomation::ElementFromHandle, ElementFromPoint e GetFocusedElement e ao manipular eventos para os quais o cliente se registrou.
A Acessibilidade Ativa da Microsoft ou Automação da Interface do Usuário especifica o tipo de objeto para o qual precisa de informações passando um valor chamado identificador de objeto com a mensagem WM_GETOBJECT. Quando ele recebe a mensagem, o servidor ou provedor examina o identificador de objeto para determinar como responder à mensagem. A resposta depende se o aplicativo receptor implementa a Acessibilidade Ativa da Microsoft (um servidor), Automação da Interface do Usuário (um provedor) ou nenhum dos dois para o objeto especificado.
- Se o aplicativo receptor for um servidor de Acessibilidade Ativa da Microsoft e a mensagem WM_GETOBJECT incluir um identificador de objeto de OBJID_CLIENT, o servidor deverá retornar o valor obtido passando a interface IAccessible do objeto para a função LresultFromObject .
- Se o aplicativo receptor for um provedor de Automação da Interface do Usuário e o identificador de objeto for UiaRootObjectId, o provedor deverá retornar a interface IRawElementProviderSimple do objeto. O provedor obtém a interface chamando a função UiaReturnRawElementProvider .
- Se o aplicativo receptor não implementar a Acessibilidade Ativa da Microsoft nem Automação da Interface do Usuário, ele deverá passar a mensagem WM_GETOBJECT para a função DefWindowProc. Passar a mensagem permite que a estrutura de acessibilidade determine se um proxy está disponível para o objeto especificado.
- Se o identificador do objeto não for OBJID_CLIENT nem UiaRootObjectId, o aplicativo receptor deverá passar a mensagem WM_GETOBJECT para a função DefWindowProc . Passar a mensagem permite que a estrutura de acessibilidade use os provedores padrão para elementos de interface do usuário padrão.
A Acessibilidade Ativa da Microsoft e Automação da Interface do Usuário podem passar identificadores de objeto personalizados em uma mensagem WM_GETOBJECT para recuperar valores ou objetos definidos pelo aplicativo de um servidor ou provedor. O identificador de objeto OBJID_NATIVEOM ou OBJID_QUERYCLASSNAMEIDX pode ser usado para recuperar uma interface nativa do Modelo de Objeto ou para solicitar um objeto proxy específico compatível com Oleacc.dll.
Ao lidar com os identificadores de objeto OBJID_CLIENT e UiaRootObjectId, uma implementação do servidor microsoft Active Accessibility pode coexistir junto com uma implementação de provedor de Automação da Interface do Usuário. Como a maioria dos controles padrão do Windows e controles comuns implementados pela biblioteca de controle comum (ComCtl32.dll) não implementa a Acessibilidade Ativa da Microsoft ou Automação da Interface do Usuário, esses controles normalmente não lidam com a mensagem de WM_GETOBJECT. Em vez disso, a estrutura Microsoft Active Accessibility ou Automação da Interface do Usuário verifica se um objeto proxy está disponível para um elemento de interface do usuário específico. Caso contrário, ele fornece o objeto proxy padrão para o objeto da janela do host.