Delen via


UI Automation en Microsoft Active Accessibility

Notitie

Deze documentatie is bedoeld voor .NET Framework-ontwikkelaars die de beheerde UI Automation-klassen willen gebruiken die zijn gedefinieerd in de System.Windows.Automation naamruimte. Zie Windows Automation-API: UI Automation voor de meest recente informatie over UI Automation.

Microsoft Active Accessibility was de eerdere oplossing voor het toegankelijk maken van toepassingen. Microsoft UI Automation is het nieuwe toegankelijkheidsmodel voor Microsoft Windows en is bedoeld om tegemoet te komen aan de behoeften van ondersteunende technologieproducten en geautomatiseerde testhulpprogramma's. UI Automation biedt veel verbeteringen ten opzichte van actieve toegankelijkheid.

Dit onderwerp bevat de belangrijkste functies van UI Automation en legt uit hoe deze functies verschillen van Actieve toegankelijkheid.

Programmeertalen

Actieve toegankelijkheid is gebaseerd op het Component Object Model (COM) met ondersteuning voor dubbele interfaces en is daarom programmeerbaar in C/C++, Microsoft Visual Basic 6.0 en scripttalen. UI Automation (inclusief de providerbibliotheek aan de clientzijde voor standaardbesturingselementen) is geschreven in beheerde code en UI Automation-clienttoepassingen zijn het eenvoudigst geprogrammeerd met C# of Visual Basic .NET. UI Automation-providers, die interface-implementaties zijn, kunnen worden geschreven in beheerde code of in C/C++.

Ondersteuning in Windows Presentation Foundation

Windows Presentation Foundation (WPF) is het nieuwe model voor het maken van gebruikersinterfaces. WPF-elementen bevatten geen systeemeigen ondersteuning voor actieve toegankelijkheid; Ze bieden echter wel ondersteuning voor UI Automation, waaronder overbruggingsondersteuning voor Actieve toegankelijkheidsclients. Alleen clients die specifiek zijn geschreven voor UI Automation, kunnen optimaal profiteren van de toegankelijkheidsfuncties van WPF, zoals de uitgebreide ondersteuning voor tekst.

Servers en clients

In Actieve toegankelijkheid communiceren servers en clients rechtstreeks, grotendeels via de implementatie van IAccessiblede server.

In UI Automation ligt een kernservice tussen de server (een provider genoemd) en de client. De kernservice roept de interfaces aan die zijn geïmplementeerd door providers en biedt aanvullende services, zoals het genereren van unieke runtime-id's voor elementen. Clienttoepassingen gebruiken bibliotheekfuncties om de UI Automation-service aan te roepen.

UI Automation-providers kunnen informatie verstrekken aan Active Accessibility-clients en Active Accessibility-servers kunnen informatie verstrekken aan UI Automation-clienttoepassingen. Omdat Actieve toegankelijkheid echter niet zoveel informatie beschikbaar maakt als UI Automation, zijn de twee modellen niet volledig compatibel.

UI-elementen

Actieve toegankelijkheid presenteert UI-elementen als een IAccessible interface of als onderliggende id. Het is moeilijk om twee IAccessible aanwijzers te vergelijken om te bepalen of ze naar hetzelfde element verwijzen.

In UI Automation wordt elk element weergegeven als een AutomationElement object. Vergelijking wordt uitgevoerd met behulp van de gelijkheidsoperator of de Equals methode, waarbij beide de unieke runtime-id's van de elementen vergelijken.

Structuurweergaven en navigatie

De elementen van de gebruikersinterface (UI) op het scherm kunnen worden gezien als een structuurstructuur met het bureaublad als de hoofdmap, toepassingsvensters als directe onderliggende elementen en elementen in toepassingen als verdere afstammelingen.

In Actieve toegankelijkheid worden veel automatiseringselementen die niet relevant zijn voor eindgebruikers weergegeven in de structuur. Clienttoepassingen moeten alle elementen bekijken om te bepalen welke betekenisvol zijn.

UI Automation-clienttoepassingen zien de gebruikersinterface via een gefilterde weergave. De weergave bevat alleen interessante elementen: die informatie geven aan de gebruiker of interactie inschakelen. Vooraf gedefinieerde weergaven van alleen besturingselementen en alleen inhoudselementen zijn beschikbaar; Daarnaast kunnen toepassingen aangepaste weergaven definiëren. UI Automation vereenvoudigt de taak van het beschrijven van de gebruikersinterface voor de gebruiker en het helpen van de gebruiker om te communiceren met de toepassing.

Navigatie tussen elementen, in Actieve toegankelijkheid, is ruimtelijk (bijvoorbeeld verplaatsen naar het element dat links op het scherm ligt), logisch (bijvoorbeeld naar het volgende menu-item of het volgende item in de tabvolgorde in een dialoogvenster) of hiërarchisch (bijvoorbeeld het eerste onderliggende element in een container verplaatsen of van het onderliggende item naar het bovenliggende item). Hiërarchische navigatie is ingewikkeld doordat onderliggende elementen niet altijd objecten zijn die worden geïmplementeerd IAccessible.

In UI Automation zijn AutomationElement alle UI-elementen objecten die dezelfde basisfunctionaliteit ondersteunen. (Vanuit het oogpunt van de provider zijn het objecten die een interface implementeren die is overgenomen van IRawElementProviderSimple.) Navigatie is voornamelijk hiërarchisch: van ouders tot kinderen en van het ene broertje tot het andere. (Navigatie tussen broers en zussen heeft een logisch element, omdat het de tabvolgorde kan volgen.) U kunt navigeren vanaf elk beginpunt, met behulp van een gefilterde weergave van de structuur, met behulp van de TreeWalker klasse. U kunt ook naar bepaalde onderliggende of onderliggende elementen navigeren met behulp van FindFirst en FindAll; het is bijvoorbeeld heel eenvoudig om alle elementen in een dialoogvenster op te halen die ondersteuning bieden voor een opgegeven besturingspatroon.

Navigatie in UI Automation is consistenter dan in Actieve toegankelijkheid. Sommige elementen, zoals vervolgkeuzelijsten en pop-upvensters, worden twee keer weergegeven in de actieve toegankelijkheidsstructuur en de navigatie van deze elementen kan onverwachte resultaten hebben. Het is eigenlijk onmogelijk om actieve toegankelijkheid correct te implementeren voor een rebar-besturingselement. Ui Automation maakt het mogelijk om het opnieuw te verplaatsen en te verplaatsen, zodat een element overal in de structuur kan worden geplaatst, ondanks de hiërarchie die wordt opgelegd door eigendom van vensters.

Rollen en besturingstypen

Actieve toegankelijkheid maakt gebruik van de accRole eigenschap (IAccessible::get_actRole) om een beschrijving op te halen van de rol van het element in de gebruikersinterface, zoals ROLE_SYSTEM_SLIDER of ROLE_SYSTEM_MENUITEM. De rol van een element is de belangrijkste aanwijzing voor de beschikbare functionaliteit. Interactie met een besturingselement wordt bereikt met behulp van vaste methoden zoals IAccessible::accSelect en IAccessible::accDoDefaultAction. De interactie tussen de clienttoepassing en de gebruikersinterface is beperkt tot wat er kan worden gedaan.IAccessible

Ui Automation koppelt daarentegen grotendeels het besturingstype van het element (beschreven door de ControlType eigenschap) los van de verwachte functionaliteit. Functionaliteit wordt bepaald door de besturingspatronen die door de provider worden ondersteund door de implementatie van gespecialiseerde interfaces. Besturingspatronen kunnen worden gecombineerd om de volledige set functionaliteit te beschrijven die wordt ondersteund door een bepaald UI-element. Sommige providers zijn vereist om een bepaald controlepatroon te ondersteunen; De provider voor een selectievakje moet bijvoorbeeld het wisselknoppatroon ondersteunen. Andere providers moeten een of meer van een set controlepatronen ondersteunen; Een knop moet bijvoorbeeld de wisselknop of Aanroepen ondersteunen. Nog anderen ondersteunen helemaal geen controlepatronen; Een deelvenster dat bijvoorbeeld niet kan worden verplaatst, gewijzigd of gedokt, heeft geen besturingspatronen.

UI Automation ondersteunt aangepaste besturingselementen, die worden geïdentificeerd door de Custom eigenschap en kunnen worden beschreven door de LocalizedControlTypeProperty eigenschap.

In de volgende tabel ziet u de toewijzing van active accessibility-rollen aan ui Automation-besturingstypen.

Actieve toegankelijkheidsrol Type UI Automation-besturingselement
ROLE_SYSTEM_PUSHBUTTON Knop
ROLE_SYSTEM_CLIENT Calendar
ROLE_SYSTEM_CHECKBUTTON Selectievakje
ROLE_SYSTEM_COMBOBOX Keuzelijst met invoervak
ROLE_SYSTEM_CLIENT Aanpassen
ROLE_SYSTEM_LIST Gegevensraster
ROLE_SYSTEM_LISTITEM Gegevensitem
ROLE_SYSTEM_DOCUMENT Document
ROLE_SYSTEM_TEXT Bewerken
ROLE_SYSTEM_GROUPING Groep
ROLE_SYSTEM_LIST Koptekst
ROLE_SYSTEM_COLUMNHEADER Koptekstitem
ROLE_SYSTEM_LINK Hyperlink
ROLE_SYSTEM_GRAPHIC Image
ROLE_SYSTEM_LIST List
ROLE_SYSTEM_LISTITEM Lijstitem
ROLE_SYSTEM_MENUPOPUP Menu
ROLE_SYSTEM_MENUBAR Menubalk
ROLE_SYSTEM_MENUITEM Menuopdracht
ROLE_SYSTEM_PANE Deelvenster
ROLE_SYSTEM_PROGRESSBAR Voortgangsbalk
ROLE_SYSTEM_RADIOBUTTON Radio button
ROLE_SYSTEM_SCROLLBAR Schuifbalk
ROLE_SYSTEM_SEPARATOR Scheidingsteken
ROLE_SYSTEM_SLIDER Schuifregelaar
ROLE_SYSTEM_SPINBUTTON Spinner
ROLE_SYSTEM_SPLITBUTTON Knop Splitsen
ROLE_SYSTEM_STATUSBAR Statusbalk
ROLE_SYSTEM_PAGETABLIST Tab
ROLE_SYSTEM_PAGETAB Tabbladitem
ROLE_SYSTEM_TABLE Tabel
ROLE_SYSTEM_STATICTEXT Sms verzenden
ROLE_SYSTEM_INDICATOR Duim
ROLE_SYSTEM_TITLEBAR Titelbalk
ROLE_SYSTEM_TOOLBAR Werkbalk
ROLE_SYSTEM_TOOLTIP Tooltip
ROLE_SYSTEM_OUTLINE Structuur
ROLE_SYSTEM_OUTLINEITEM Structuuritem
ROLE_SYSTEM_WINDOW Venster

Zie Ui Automation-besturingstypen voor meer informatie over de verschillende typen besturingselementen.

Statussen en eigenschappen

In Actieve toegankelijkheid ondersteunen elementen een gemeenschappelijke set eigenschappen en sommige eigenschappen (zoals accState) moeten heel verschillende dingen beschrijven, afhankelijk van de rol van het element. Servers moeten alle methoden implementeren waarmee IAccessible een eigenschap wordt geretourneerd, zelfs de methoden die niet relevant zijn voor het element.

UI Automation definieert nog veel meer eigenschappen, waarvan sommige overeenkomen met statussen in Actieve toegankelijkheid. Sommige zijn gebruikelijk voor alle elementen, maar andere zijn specifiek voor het beheren van typen en besturingspatronen. Eigenschappen worden onderscheiden door unieke id's en de meeste eigenschappen kunnen worden opgehaald met behulp van één methode, GetCurrentPropertyValue of GetCachedPropertyValue. Veel eigenschappen kunnen ook eenvoudig worden opgehaald uit de Current toegangs- en Cached eigenschapstoegangsors.

Een UI Automation-provider hoeft geen irrelevante eigenschappen te implementeren, maar kan gewoon een null waarde retourneren voor eigenschappen die niet worden ondersteund. Bovendien kan de UI Automation-kernservice bepaalde eigenschappen verkrijgen van de standaardvensterprovider. Deze zijn samengevoegd met eigenschappen die expliciet door de provider worden geïmplementeerd.

Naast het ondersteunen van veel meer eigenschappen biedt UI Automation betere prestaties doordat meerdere eigenschappen kunnen worden opgehaald met één aanroep voor meerdere processen.

In de volgende tabel ziet u de correspondentie tussen eigenschappen in de twee modellen.

Accessor voor actieve toegankelijkheidseigenschappen Id van ui Automation-eigenschap Opmerkingen
get_accKeyboardShortcut AccessKeyProperty of AcceleratorKeyProperty AccessKeyProperty heeft voorrang als beide aanwezig zijn.
get_accName NameProperty
get_accRole ControlTypeProperty Zie de vorige tabel voor het toewijzen van rollen aan besturingstypen.
get_accValue ValuePattern.ValueProperty

RangeValuePattern.ValueProperty
Alleen geldig voor besturingselementtypen die ValuePattern of RangeValuePattern ondersteunen. RangeValue-waarden worden genormaliseerd tot 0-100, om consistent te zijn met MSAA-gedrag. Waarde-items gebruiken een tekenreeks.
get_accHelp HelpTextProperty
accLocation BoundingRectangleProperty
get_accDescription Niet ondersteund in UI Automation accDescription had geen duidelijke specificatie binnen MSAA, waardoor providers verschillende stukjes informatie in deze eigenschap plaatsten.
get_accHelpTopic Niet ondersteund in UI Automation

In de volgende tabel ziet u welke eigenschappen van UI Automation overeenkomen met constanten voor actieve toegankelijkheidsstatussen.

Actieve toegankelijkheidsstatus Ui Automation-eigenschap Statuswijziging triggers?
STATE_SYSTEM_CHECKED Voor selectievakje, ToggleStateProperty

Voor keuzerondje, IsSelectedProperty
J
STATE_SYSTEM_COLLAPSED ExpandCollapseState = Collapsed J
STATE_SYSTEM_EXPANDED ExpandCollapseState = Expanded of PartiallyExpanded J
STATE_SYSTEM_FOCUSABLE IsKeyboardFocusableProperty N
STATE_SYSTEM_FOCUSED HasKeyboardFocusProperty N
STATE_SYSTEM_HASPOPUP ExpandCollapsePattern voor menu-items N
STATE_SYSTEM_INVISIBLE IsOffscreenProperty = Waar en GetClickablePoint oorzaken NoClickablePointException N
STATE_SYSTEM_LINKED ControlTypeProperty =

Hyperlink
N
STATE_SYSTEM_MIXED ToggleState = Indeterminate N
STATE_SYSTEM_MOVEABLE CanMoveProperty N
STATE_SYSTEM_MUTLISELECTABLE CanSelectMultipleProperty N
STATE_SYSTEM_OFFSCREEN IsOffscreenProperty = Waar N
STATE_SYSTEM_PROTECTED IsPasswordProperty N
STATE_SYSTEM_READONLY RangeValuePattern.IsReadOnlyProperty en ValuePattern.IsReadOnlyProperty N
STATE_SYSTEM_SELECTABLE SelectionItemPattern wordt ondersteund N
STATE_SYSTEM_SELECTED IsSelectedProperty N
STATE_SYSTEM_SIZEABLE CanResize N
STATE_SYSTEM_UNAVAILABLE IsEnabledProperty J

De volgende statussen zijn niet geïmplementeerd door de meeste actieve toegankelijkheidsbeheerservers of hebben geen equivalent in UI Automation.

Actieve toegankelijkheidsstatus Opmerkingen
STATE_SYSTEM_BUSY Niet beschikbaar in UI Automation
STATE_SYSTEM_DEFAULT Niet beschikbaar in UI Automation
STATE_SYSTEM_ANIMATED Niet beschikbaar in UI Automation
STATE_SYSTEM_EXTSELECTABLE Niet algemeen geïmplementeerd door actieve toegankelijkheidsservers
STATE_SYSTEM_MARQUEED Niet algemeen geïmplementeerd door actieve toegankelijkheidsservers
STATE_SYSTEM_SELFVOICING Niet algemeen geïmplementeerd door actieve toegankelijkheidsservers
STATE_SYSTEM_TRAVERSED Niet beschikbaar in UI Automation
STATE_SYSTEM_ALERT_HIGH Niet algemeen geïmplementeerd door actieve toegankelijkheidsservers
STATE_SYSTEM_ALERT_MEDIUM Niet algemeen geïmplementeerd door actieve toegankelijkheidsservers
STATE_SYSTEM_ALERT_LOW Niet algemeen geïmplementeerd door actieve toegankelijkheidsservers
STATE_SYSTEM_FLOATING Niet algemeen geïmplementeerd door actieve toegankelijkheidsservers
STATE_SYSTEM_HOTTRACKED Niet beschikbaar in UI Automation
STATE_SYSTEM_PRESSED Niet beschikbaar in UI Automation

Zie Overzicht van UI Automation-eigenschappen voor een volledige lijst met id's van UI Automation-eigenschappen.

gebeurtenis

Het gebeurtenismechanisme in UI Automation, in tegenstelling tot dat in Active Accessibility, is niet afhankelijk van Windows-gebeurtenisroutering (die nauw is gekoppeld aan venstergrepen) en vereist niet dat de clienttoepassing hooks instelt. Abonnementen op gebeurtenissen kunnen worden afgestemd op niet alleen bepaalde gebeurtenissen, maar ook op bepaalde delen van de boomstructuur. Providers kunnen hun gebeurtenissen ook verfijnen door bij te houden waar naar gebeurtenissen wordt geluisterd.

Het is ook eenvoudiger voor clients om de elementen op te halen die gebeurtenissen genereren, omdat deze rechtstreeks worden doorgegeven aan de callback van de gebeurtenis. Eigenschappen van het element worden automatisch vooraf geactiveerd als een cacheaanvraag actief was toen de client zich op de gebeurtenis heeft geabonneerd.

In de volgende tabel ziet u de correspondentie van WinEvents voor Actieve toegankelijkheid en UI Automation-gebeurtenissen.

WinEvent Ui Automation-gebeurtenis-id
EVENT_OBJECT_ACCELERATORCHANGE AcceleratorKeyProperty eigenschapswijziging
EVENT_OBJECT_CONTENTSCROLLED VerticalScrollPercentProperty of HorizontalScrollPercentProperty eigenschapswijziging op de bijbehorende schuifbalken
EVENT_OBJECT_CREATE StructureChangedEvent
EVENT_OBJECT_DEFACTIONCHANGE Geen equivalent
EVENT_OBJECT_DESCRIPTIONCHANGE Geen exacte equivalent; misschien HelpTextProperty of LocalizedControlTypeProperty eigenschapswijziging
EVENT_OBJECT_DESTROY StructureChangedEvent
EVENT_OBJECT_FOCUS AutomationFocusChangedEvent
EVENT_OBJECT_HELPCHANGE HelpTextProperty Wijzigen
EVENT_OBJECT_HIDE StructureChangedEvent
EVENT_OBJECT_LOCATIONCHANGE BoundingRectangleProperty eigenschapswijziging
EVENT_OBJECT_NAMECHANGE NameProperty eigenschapswijziging
EVENT_OBJECT_PARENTCHANGE StructureChangedEvent
EVENT_OBJECT_REORDER Niet consistent gebruikt in Actieve toegankelijkheid. Er is geen rechtstreeks bijbehorende gebeurtenis gedefinieerd in UI Automation.
EVENT_OBJECT_SELECTION ElementSelectedEvent
EVENT_OBJECT_SELECTIONADD ElementAddedToSelectionEvent
EVENT_OBJECT_SELECTIONREMOVE ElementRemovedFromSelectionEvent
EVENT_OBJECT_SELECTIONWITHIN Geen equivalent
EVENT_OBJECT_SHOW StructureChangedEvent
EVENT_OBJECT_STATECHANGE Verschillende gebeurtenissen die door eigenschappen zijn gewijzigd
EVENT_OBJECT_VALUECHANGE RangeValuePattern.ValueProperty en ValuePattern.ValueProperty gewijzigd
EVENT_SYSTEM_ALERT Geen equivalent
EVENT_SYSTEM_CAPTUREEND Geen equivalent
EVENT_SYSTEM_CAPTURESTART Geen equivalent
EVENT_SYSTEM_CONTEXTHELPEND Geen equivalent
EVENT_SYSTEM_CONTEXTHELPSTART Geen equivalent
EVENT_SYSTEM_DIALOGEND WindowClosedEvent
EVENT_SYSTEM_DIALOGSTART WindowOpenedEvent
EVENT_SYSTEM_DRAGDROPEND Geen equivalent
EVENT_SYSTEM_DRAGDROPSTART Geen equivalent
EVENT_SYSTEM_FOREGROUND AutomationFocusChangedEvent
EVENT_SYSTEM_MENUEND MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPEND MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPSTART MenuOpenedEvent
EVENT_SYSTEM_MENUSTART MenuOpenedEvent
EVENT_SYSTEM_MINIMIZEEND WindowVisualStateProperty eigenschapswijziging
EVENT_SYSTEM_MINIMIZESTART WindowVisualStateProperty eigenschapswijziging
EVENT_SYSTEM_MOVESIZEEND BoundingRectangleProperty eigenschapswijziging
EVENT_SYSTEM_MOVESIZESTART BoundingRectangleProperty eigenschapswijziging
EVENT_SYSTEM_SCROLLINGEND VerticalScrollPercentProperty of HorizontalScrollPercentProperty eigenschapswijziging
EVENT_SYSTEM_SCROLLINGSTART VerticalScrollPercentProperty of HorizontalScrollPercentProperty eigenschapswijziging
EVENT_SYSTEM_SOUND Geen equivalent
EVENT_SYSTEM_SWITCHEND Geen equivalent, maar een AutomationFocusChangedEvent gebeurtenis geeft aan dat een nieuwe toepassing de focus heeft gekregen
EVENT_SYSTEM_SWITCHSTART Geen equivalent
Geen equivalent CurrentViewProperty eigenschapswijziging
Geen equivalent HorizontallyScrollableProperty eigenschapswijziging
Geen equivalent VerticallyScrollableProperty eigenschapswijziging
Geen equivalent HorizontalScrollPercentProperty eigenschapswijziging
Geen equivalent VerticalScrollPercentProperty eigenschapswijziging
Geen equivalent HorizontalViewSizeProperty eigenschapswijziging
Geen equivalent VerticalViewSizeProperty eigenschapswijziging
Geen equivalent ToggleStateProperty eigenschapswijziging
Geen equivalent WindowVisualStateProperty eigenschapswijziging
Geen equivalent AsyncContentLoadedEvent Gebeurtenis
Geen equivalent ToolTipOpenedEvent

Beveiliging

Voor sommige IAccessible aanpassingsscenario's moet een basis IAccessible worden verpakt en ernaar worden aangeroepen. Dit heeft gevolgen voor de beveiliging, omdat een gedeeltelijk vertrouwd onderdeel geen intermediair mag zijn voor een codepad.

Het UI Automation-model verwijdert de noodzaak voor providers om door te bellen naar andere providercode. De UI Automation Core-service voert alle benodigde aggregatie uit.

Zie ook