Gestion du message WM_GETOBJECT
Microsoft Active Accessibility et Microsoft UI Automation envoyer le message WM_GETOBJECT à un serveur ou à une application fournisseur pour récupérer des informations sur un objet accessible pris en charge par le serveur ou le fournisseur. Les clients n’envoient jamais WM_GETOBJECT directement. Au lieu de cela, Microsoft Active Accessibility envoie ce message lorsqu’un client appelle les fonctions AccessibleObjectFromPoint, AccessibleObjectFromEvent et AccessibleObjectFromWindow . UI Automation envoie WM_GETOBJECT lorsqu’un client appelle IUIAutomation::ElementFromHandle, ElementFromPoint et GetFocusedElement, et lors de la gestion des événements pour lesquels le client s’est inscrit.
Microsoft Active Accessibility ou UI Automation spécifie le type d’objet pour lequel il a besoin d’informations en passant une valeur appelée identificateur d’objet avec le message WM_GETOBJECT. Lorsqu’il reçoit le message, le serveur ou le fournisseur examine l’identificateur d’objet pour déterminer comment répondre au message. La réponse varie selon que l’application réceptrice implémente Microsoft Active Accessibility (un serveur), UI Automation (un fournisseur) ou aucun des deux, pour l’objet spécifié.
- Si l’application réceptrice est un serveur Microsoft Active Accessibility et que le message WM_GETOBJECT inclut un identificateur d’objet de OBJID_CLIENT, le serveur doit retourner la valeur obtenue en passant l’interface IAccessible de l’objet à la fonction LresultFromObject .
- Si l’application réceptrice est un fournisseur UI Automation et que l’identificateur d’objet est UiaRootObjectId, le fournisseur doit retourner l’interface IRawElementProviderSimple de l’objet. Le fournisseur obtient l’interface en appelant la fonction UiaReturnRawElementProvider .
- Si l’application réceptrice n’implémente ni Microsoft Active Accessibility ni UI Automation, elle doit transmettre le message WM_GETOBJECT à la fonction DefWindowProc. La transmission du message permet à l’infrastructure d’accessibilité de déterminer si un proxy est disponible pour l’objet spécifié.
- Si l’identificateur d’objet n’est ni OBJID_CLIENT ni UiaRootObjectId, l’application réceptrice doit passer le message WM_GETOBJECT à la fonction DefWindowProc . La transmission du message permet à l’infrastructure d’accessibilité d’utiliser les fournisseurs par défaut pour les éléments d’interface utilisateur standard.
Microsoft Active Accessibility et UI Automation peuvent passer des identificateurs d’objet personnalisés dans un message WM_GETOBJECT pour récupérer des valeurs ou des objets définis par l’application à partir d’un serveur ou d’un fournisseur. L’identificateur d’objet OBJID_NATIVEOM ou OBJID_QUERYCLASSNAMEIDX peut être utilisé pour récupérer une interface de modèle objet native ou pour demander un objet proxy spécifique pris en charge par Oleacc.dll.
En gérant à la fois les identificateurs d’objet OBJID_CLIENT et UiaRootObjectId, une implémentation de serveur Microsoft Active Accessibility peut coexister avec une implémentation de fournisseur de UI Automation. Étant donné que la plupart des contrôles Windows standard et des contrôles courants implémentés par la bibliothèque de contrôles commune (ComCtl32.dll) n’implémentent pas Microsoft Active Accessibility ou UI Automation, ces contrôles ne gèrent généralement pas le message WM_GETOBJECT. Au lieu de cela, l’infrastructure Microsoft Active Accessibility ou UI Automation vérifie si un objet proxy est disponible pour un élément d’interface utilisateur particulier. Sinon, il fournit l’objet proxy par défaut pour l’objet de fenêtre hôte.