Sdílet prostřednictvím


Automatizace uživatelského rozhraní a Microsoft Active Accessibility

Poznámka:

Tato dokumentace je určená pro vývojáře rozhraní .NET Framework, kteří chtějí používat spravované třídy automatizace uživatelského rozhraní definované v oboru názvů System.Windows.Automation. Nejnovější informace o automatizaci uživatelského rozhraní najdete v tématu rozhraní API služby Windows Automation: Automatizace uživatelského rozhraní.

Microsoft Active Accessibility byl dřívějším řešením pro zpřístupnění aplikací. Microsoft UI Automation je nový model přístupnosti pro Microsoft Windows a je určený k řešení potřeb produktů technologie usnadnění a automatizovaných testovacích nástrojů. Automatizace uživatelského rozhraní nabízí mnoho vylepšení aktivní přístupnosti.

Toto téma obsahuje hlavní funkce automatizace uživatelského rozhraní a vysvětluje, jak se tyto funkce liší od funkce Active Accessibility.

Programovací jazyky

Aktivní přístupnost je založená na modelu COM (Component Object Model) s podporou duálních rozhraní, a proto je programovatelný v jazyce C/C++, Microsoft Visual Basic 6.0 a skriptovací jazyky. Automatizace uživatelského rozhraní (včetně knihovny zprostředkovatele na straně klienta pro standardní ovládací prvky) je napsaná ve spravovaném kódu a klientské aplikace automatizace uživatelského rozhraní jsou nejsnážněji naprogramované pomocí jazyka C# nebo Visual Basic .NET. Zprostředkovatelé automatizace uživatelského rozhraní, což jsou implementace rozhraní, se dají psát ve spravovaném kódu nebo v jazyce C/C++.

Podpora ve Windows Presentation Foundation

Windows Presentation Foundation (WPF) je nový model pro vytváření uživatelských rozhraní. Prvky WPF neobsahují nativní podporu aktivní přístupnosti; Podporují ale automatizaci uživatelského rozhraní, která zahrnuje podporu přemostění pro klienty active accessibility. Pouze klienti napsaní speciálně pro automatizaci uživatelského rozhraní můžou plně využívat funkce přístupnosti WPF, jako je podpora bohatého formátu textu.

Servery a klienti

V aktivní přístupnosti komunikují servery a klienti přímo prostřednictvím implementace IAccessibleserveru .

Ve službě Automatizace uživatelského rozhraní leží základní služba mezi serverem (označovaným jako poskytovatel) a klientem. Hlavní služba volá rozhraní implementovaná poskytovateli a poskytuje další služby, jako je generování jedinečných identifikátorů pro prvky v době běhu. Klientské aplikace používají funkce knihovny k volání služby Automatizace uživatelského rozhraní.

Poskytovatelé automatizace uživatelského rozhraní můžou klientům služby Active Accessibility poskytnout informace a servery s aktivní přístupností můžou poskytovat informace klientským aplikacím automatizace uživatelského rozhraní. Vzhledem k tomu, že aktivní přístupnost nezpřístupňuje tolik informací jako automatizace uživatelského rozhraní, nejsou tyto dva modely plně kompatibilní.

Prvky uživatelského rozhraní

Aktivní přístupnost zobrazuje prvky uživatelského rozhraní buď jako IAccessible rozhraní, nebo jako identifikátor podřízeného prvku. Je obtížné porovnat dva IAccessible ukazatele určit, zda odkazují na stejný prvek.

V automatizaci uživatelského rozhraní je každý prvek reprezentován jako AutomationElement objekt. Porovnání se provádí pomocí operátoru rovnosti Equals nebo metody, z nichž obě porovnávají jedinečné identifikátory za běhu prvků.

Stromová zobrazení a navigace

Prvky uživatelského rozhraní (UI) na obrazovce lze považovat za stromovou strukturu s plochou jako kořen, okna aplikací jako bezprostřední podřízené položky a prvky v aplikacích jako další potomky.

Ve funkci Aktivní přístupnost je ve stromu vystaveno mnoho prvků automatizace, které nejsou pro koncové uživatele relevantní. Klientské aplikace musí analyzovat všechny prvky, aby určily, které jsou smysluplné.

Klientské aplikace automatizace uživatelského rozhraní vidí uživatelské rozhraní prostřednictvím filtrovaného zobrazení. Zobrazení obsahuje pouze prvky zájmu: ty, které poskytují informace uživateli nebo umožňují interakci. Předdefinovaná zobrazení pouze řídicích prvků a jsou k dispozici pouze prvky obsahu; Kromě toho můžou aplikace definovat vlastní zobrazení. Automatizace uživatelského rozhraní zjednodušuje popis uživatelského rozhraní uživateli a pomáhá uživateli pracovat s aplikací.

Navigace mezi prvky v rámci Active Accessibility je prostorová (například přechod na prvek vlevo na obrazovce), logická (například přechod na další položku nabídky nebo další položku v pořadí záložek v dialogovém okně) nebo hierarchická (například přesunutí prvního podřízeného prvku v kontejneru nebo z podřízeného prvku k nadřazenému prvku). Hierarchická navigace je komplikovaná skutečností, že podřízené prvky nejsou vždy objekty, které implementují IAccessible.

Ve automatizaci uživatelského rozhraní jsou AutomationElement všechny prvky uživatelského rozhraní objekty, které podporují stejné základní funkce. (Z hlediska poskytovatele jde o objekty, které implementují rozhraní zděděné z IRawElementProviderSimple.) Navigace je hlavně hierarchická: od rodičů k dětem a od jednoho sourozence k dalšímu. (Navigace mezi sourozenci má logický prvek, protože může následovat pořadí záložek.) Můžete navigovat z libovolného výchozího bodu pomocí libovolného filtrovaného zobrazení stromu použitím třídy TreeWalker. Můžete také přejít na konkrétní podřízené nebo potomky pomocí FindFirst a FindAll; například je velmi snadné načíst všechny prvky v dialogovém okně, které podporují určený vzor ovládacího prvku.

Navigace v automatizaci uživatelského rozhraní je konzistentnější než aktivní přístupnost. Některé prvky, jako jsou rozevírací seznamy a automaticky otevíraná okna, se ve stromu aktivní přístupnosti zobrazují dvakrát a navigace z nich může mít neočekávané výsledky. Ve skutečnosti není možné správně implementovat aktivní přístupnost pro ovládací prvek panelu. Automatizace uživatelského rozhraní umožňuje přeusťování a přemísťování, takže prvek může být umístěn kdekoli ve stromu, a to i přes hierarchii uloženou vlastnictvím oken.

Role a typy ovládacích prvků

Funkce Active Accessibility používá accRole vlastnost (IAccessible::get_actRole) k načtení popisu role elementu v uživatelském rozhraní, například ROLE_SYSTEM_SLIDER nebo ROLE_SYSTEM_MENUITEM. Role prvku je hlavním vodítkem pro jeho dostupné funkce. Interakce s ovládacím prvkem se dosahuje pomocí pevných metod, jako jsou IAccessible::accSelect a IAccessible::accDoDefaultAction. Interakce mezi klientskou aplikací a uživatelským rozhraním je omezená na to, co lze provést prostřednictvím IAccessible.

Automatizace uživatelského rozhraní naproti tomu z velké části odděluje typ ovládacího prvku (popsaný ControlType vlastností) od jeho očekávané funkce. Funkce jsou určeny vzory ovládacích prvků, které poskytovatel podporuje prostřednictvím své implementace specializovaných rozhraní. Vzory ovládacích prvků lze kombinovat a popsat úplnou sadu funkcí podporovaných konkrétním prvkem uživatelského rozhraní. Někteří poskytovatelé jsou povinni podporovat určitý vzor kontroly; Například zprostředkovatel zaškrtávacího políčka musí podporovat model přepínacího ovládacího prvku. Od poskytovatelů se vyžaduje podpora jednoho nebo více řídicích vzorů; například tlačítko musí podporovat buď přepínací nebo aktivační funkci. Ostatní stále nepodporují žádné řídicí vzory vůbec; Například podokno, které nelze přesunout, změnit jeho velikost nebo ukotvit, nemá žádné vzory ovládacích prvků.

Automatizace uživatelského rozhraní podporuje vlastní ovládací prvky, které jsou identifikované vlastností Custom a mohou být popsány vlastností LocalizedControlTypeProperty .

Následující tabulka ukazuje mapování rolí aktivní přístupnosti na typy ovládacích prvků automatizace uživatelského rozhraní.

Aktivní role přístupnosti Typ ovládacího prvku Automatizace uživatelského rozhraní
role systému tlačítko Knoflík
ROLE_SYSTEM_KLIENT Kalendář
ROLE_SYSTÉM_ZAŠKRTÁVACÍ_TLAČÍTKO Zaškrtávací políčko
ROLE_SYSTEM_KOMBINOVANÉ_POLE Kombinované pole
ROLE_SYSTEM_KLIENT Na zakázku
The current solution may be appropriate if the term is used as is in the system for recognition or coding purposes. If a translation is necessary for comprehension in a more descriptive context, consider translating it to: "SEZNAM_SYSTÉMOVÉ_ROLE". Datová mřížka
ROLE_SYSTEM_POLOŽKA_SEZNAMU Datová položka
ROLE_SYSTÉMOVÝ_DOKUMENT Dokument
ROLE_SYSTÉMOVÝ_TEXT Upravit
ROLE_SYSTÉMOVÉ_SKUPINOVÁNÍ Skupina
The current solution may be appropriate if the term is used as is in the system for recognition or coding purposes. If a translation is necessary for comprehension in a more descriptive context, consider translating it to: "SEZNAM_SYSTÉMOVÉ_ROLE". Záhlaví
ROLE_SYSTEM_PŘEDNADPIS_SLOUPCE Položka záhlaví
ROLE_SYSTEM_ODKAZ Hypertextový odkaz
ROLE_SYSTEM_GRAFICKÝ Obrázek
The current solution may be appropriate if the term is used as is in the system for recognition or coding purposes. If a translation is necessary for comprehension in a more descriptive context, consider translating it to: "SEZNAM_SYSTÉMOVÉ_ROLE". Seznam
ROLE_SYSTEM_POLOŽKA_SEZNAMU Položka seznamu
ROLE_SYSTÉMU_VYSKAKOPOVACÍ_MENU Jídelní lístek
ROLE_SYSTEM_MENUBAR Panel nabídek
ROLE_SYSTÉMOVÁ_POLOŽKA_MENU Položka v menu
ROLA_SYSTÉMOVÝ_PANEL Okno
ROLE_SYSTEM_Ukazatel_průběhu Indikátor průběhu
ROLE_SYSTEM_RÁDIO_TLAČÍTKO Rádiový tlačítko
Role systému posuvníku Posuvník
ROLE_SYSTÉMOVÝ_ODDĚLOVAČ Oddělovač
ROLE_SYSTÉMU_POSUVNÍK Posuvník
ROLE_SYSTEM_SPINEKNOB Rotující indikátor průběhu
ROLE_SYSTEM_ROZDĚLENÉ_TLAČÍTKO Tlačítko Rozdělit
ROLE_SYSTEM_STAVOVÝ_PRUH Stavový řádek
ROLE_SYSTÉMU_SEZNAM_STRÁNKOVÝCH_KARET Tabulátor
ROLE_SYSTEM_STRÁNKATABULKA Položka karty
ROLE_SYSTÉMOVÁ_TABULKA Tabulka
ROLE_SYSTÉMOVÝ_STATICKÝ_TEXT Text
ROLE_SYSTEM_INDIKÁTOR Palec
ROLE_SYSTEM_TITLEBAR Záhlaví
ROLE_SYSTÉMOVÁ_NÁSTROJOVÁ_LIŠTA Panel nástrojů
ROLE_SYSTÉMOVÁ_NÁPOVĚDA Nápověda
ROLE_SYSTÉMU_OBRYSU Strom
Položka systému obrysu Položka stromu
ROLE_SYSTEM_OKNO Okno

Další informace o různých typech ovládacích prvků naleznete v UI Automation Control Types.

Stavy a vlastnosti

V režimu Aktivní přístupnost podporují prvky společnou sadu vlastností a některé vlastnosti (například accState) musí popisovat velmi různé věci v závislosti na roli elementu. Servery musí implementovat všechny metody IAccessible , které vracejí vlastnost, i ty, které nejsou relevantní pro prvek.

Automatizace uživatelského rozhraní definuje mnoho dalších vlastností, z nichž některé odpovídají stavům v režimu aktivní přístupnosti. Některé jsou společné pro všechny prvky, ale jiné jsou specifické pro typy ovládacích prvků a vzory ovládacích prvků. Vlastnosti jsou odlišeny jedinečnými identifikátory a většinu vlastností lze načíst pomocí jedné metody nebo GetCurrentPropertyValueGetCachedPropertyValue. Mnoho vlastností je také možné snadno načíst z přístupových funkcí Current a Cached vlastností.

Zprostředkovatel automatizace uživatelského rozhraní nemusí implementovat irelevantní vlastnosti, ale může jednoduše vrátit null hodnotu pro jakékoli vlastnosti, které nepodporuje. Základní služba automatizace uživatelského rozhraní může také získat některé vlastnosti od výchozího zprostředkovatele okna a jsou amalgamované s vlastnostmi explicitně implementovanými poskytovatelem.

Automatizace uživatelského rozhraní poskytuje lepší výkon tím, že umožňuje načtení více vlastností jedním voláním mezi procesy, stejně jako podpora mnoha dalších vlastností.

Následující tabulka ukazuje korespondenci mezi vlastnostmi v těchto dvou modelech.

Přístup k vlastnostem aktivní přístupnosti ID vlastnosti Automatizace uživatelského rozhraní Poznámky
get_accKeyboardShortcut AccessKeyProperty nebo AcceleratorKeyProperty AccessKeyProperty má přednost, pokud jsou přítomny oba.
get_accName NameProperty
get_accRole ControlTypeProperty V předchozí tabulce najdete mapování rolí na typy ovládacích prvků.
get_accValue ValuePattern.ValueProperty

RangeValuePattern.ValueProperty
Platné pouze pro typy ovládacích prvků, které podporují ValuePattern nebo RangeValuePattern. Hodnoty RangeValue jsou normalizovány na 0–100, aby byly konzistentní s chováním MSAA. Položky hodnot používají řetězec.
get_accHelp HelpTextProperty
accLocation BoundingRectangleProperty
get_accDescription Nepodporováno v automatizaci uživatelského rozhraní. accDescription nemá v rámci MSAA jasnou specifikaci, což vedlo k tomu, že poskytovatelé do této vlastnosti umístili různé údaje.
get_accHelpTopic Nepodporováno v automatizaci uživatelského rozhraní.

Následující tabulka ukazuje, které vlastnosti automatizace uživatelského rozhraní odpovídají konstantám stavu aktivní přístupnosti.

Stav aktivní přístupnosti Vlastnost Automatizace uživatelského rozhraní Aktivuje změnu stavu?
STAV_SYSTÉMU_ZKONTROLOVÁN Pro zaškrtávací políčko ToggleStateProperty

Pro přepínač, IsSelectedProperty
Й
stav_systém_zkolaboval ExpandCollapseState = Collapsed Й
STAV_SYSTÉMU_ROZŠÍŘEN ExpandCollapseState = Expanded nebo PartiallyExpanded Й
stav systému: zaostřitelný IsKeyboardFocusableProperty N
STAV_SYSTÉM_ZAMĚŘENO HasKeyboardFocusProperty N
STATE_SYSTEM_HASPOPUP ExpandCollapsePattern pro položky nabídky N
STAV_SYS_NEVIDITELNÝ IsOffscreenProperty = Pravda a GetClickablePoint způsobuje NoClickablePointException N
STAV_SYSTÉMU_PROPOJEN<|vq_9117|> ControlTypeProperty =

Hyperlink
N
STAV_SYSTÉMU_SMÍŠENÝ ToggleState = Indeterminate N
POHYBLIVÝ_SYSTÉM_STAVU CanMoveProperty N
STAV_SYSTÉM_MULTISELECTABLE CanSelectMultipleProperty N
STAV_SYSTÉMU_MIMO_OBRAZOVKU IsOffscreenProperty = true N
STAV_SYSTÉMU_CHRÁNĚNý IsPasswordProperty N
STAV_SYSTÉMU_JEN_KE_ČTENÍ RangeValuePattern.IsReadOnlyProperty a ValuePattern.IsReadOnlyProperty N
STAV_SYSTÉMU_VYBÍRATELNÝ SelectionItemPattern je podporováno. N
STAV_SYSTÉM_VYBRÁN IsSelectedProperty N
STAV_SYSTÉMU_NASTAVITELNÝ CanResize N
STAV_SYSTÉMU_NEDOSTUPNÝ IsEnabledProperty Й

Následující stavy buď nebyly implementovány většinou serverů řízení přístupnosti, nebo nemají žádný ekvivalent ve službě Automatizace uživatelského rozhraní.

Stav aktivní přístupnosti Poznámky
Systém je zaneprázdněný Není k dispozici ve službě Automatizace uživatelského rozhraní
Stav_systému_výchozí Není k dispozici ve službě Automatizace uživatelského rozhraní
SYSTEM_STATE_ANIMOVÁNO Není k dispozici ve službě Automatizace uživatelského rozhraní
Stav_system_extselectovatelný Servery s aktivní přístupností nejsou široce implementované
STATE_SYSTEM_MARQUEED Servery s aktivní přístupností nejsou široce implementované
STATE_SYSTEM_SELFVOICING Servery s aktivní přístupností nejsou široce implementované
STAV_SYSTÉMU_PROJÍTÝ Není k dispozici ve službě Automatizace uživatelského rozhraní
STAV_SYSTÉM_UPOZORNĚNÍ_VYSOKÉ Servery s aktivní přístupností nejsou široce implementované
STAV_SYSTÉMOVÉ_UPOZORNĚNÍ_STŘEDNÍ Servery s aktivní přístupností nejsou široce implementované
STAV_SYSTÉM_VÝSTRAHA_NÍZKÁ Servery s aktivní přístupností nejsou široce implementované
STAV_SYSTÉMU_PLAVÁNÍ Servery s aktivní přístupností nejsou široce implementované
Stav systému zaostřený za horka Není k dispozici ve službě Automatizace uživatelského rozhraní
STAV_SYSTÉMU_STISKNUTO Není k dispozici ve službě Automatizace uživatelského rozhraní

Úplný seznam identifikátorů vlastností automatizace uživatelského rozhraní najdete v tématu Přehled vlastností automatizace uživatelského rozhraní.

Události

Mechanismus událostí v automatizaci uživatelského rozhraní se na rozdíl od Aktivní přístupnosti nespoléhá na směrování událostí systému Windows, které je úzce svázané s popisovači oken, a nevyžaduje, aby klientská aplikace nastavovala hooky. Přihlášení k odběru událostí lze upravit nejen na konkrétní události, ale i na konkrétní části stromu. Poskytovatelé mohou také doladit své vyvolávání událostí tím, že sledují, jakým událostem se naslouchá.

Pro klienty je také jednodušší získat prvky, které generují události, protože tyto prvky jsou předávány přímo funkci zpětného volání události. Vlastnosti elementu se automaticky načítají, pokud byl požadavek na mezipaměť aktivní, když se klient přihlásil k odběru události.

Následující tabulka ukazuje korespondenci událostí WinEvents a Automatizace uživatelského rozhraní pro aktivní přístupnost.

WinEvent Identifikátor události automatizace uživatelského rozhraní
Událost_ZměnaAkcelerátoruObjektu AcceleratorKeyProperty změna vlastnosti
Událost posouvání obsahu objektu VerticalScrollPercentProperty nebo HorizontalScrollPercentProperty změna vlastností u přidružených posuvníků
VYTVOŘENÍ_OBJEKTU_UDÁLOSTI StructureChangedEvent
EVENT_OBJECT_DEFACTIONCHANGE Žádný ekvivalent
ZMĚNA_POPISU_OBJEKTU_EVENTS Žádný přesný ekvivalent; možná HelpTextProperty nebo LocalizedControlTypeProperty změna vlastnosti
UDÁLOST_OBJEKT_ZNIČIT StructureChangedEvent
Událost_Objekt_Zaměření AutomationFocusChangedEvent
EVENT_OBJECT_HELPCHANGE HelpTextProperty změna
SKRYTÍ_OBJEKTU_UDÁLOST StructureChangedEvent
UDÁLOST_ZMĚNA_POZICE_OBJEKTU BoundingRectangleProperty změna vlastnosti
Změna názvu objektu NameProperty změna vlastnosti
Změna rodiče objektu StructureChangedEvent
PŘESKLÁDÁNÍ OBJEKTU UDÁLOSTI Nepoužívá se konzistentně v režimu aktivní přístupnosti. V automatizaci uživatelského rozhraní není definována žádná přímo odpovídající událost.
UDÁLOST_VÝBĚR_OBJEKTU ElementSelectedEvent
UDÁLOST OBJEKTU PŘIDÁNÍ NA VÝBĚR ElementAddedToSelectionEvent
Událost odebrání výběru objektu ElementRemovedFromSelectionEvent
Událost_výběr_objektu_uvnitř Žádný ekvivalent
EVENT_OBJECT_SHOW StructureChangedEvent
UDÁLOST_ZMĚNA_STAVU_OBJEKTU Události při změně vlastností
EVENT_OBJECT_ZměnaHodnoty RangeValuePattern.ValueProperty a ValuePattern.ValueProperty bylo změněno
SYSTÉMOVÉ UPOZORNĚNÍ Žádný ekvivalent
Událost_Ukončení_Systémového_Zachycení Žádný ekvivalent
Událost_Systém_ZačátekZachytávání Žádný ekvivalent
KONEC_NÁPOVĚDY_KONTEXTU_SYSTEMU Žádný ekvivalent
UDÁLOST_SYSTÉM_NÁPOVĚDAKONTEXT_ZAHÁJENO Žádný ekvivalent
EVENT_SYSTÉM_DIALOGEND WindowClosedEvent
EVENT_SYSTEM_DIALOGSTART WindowOpenedEvent
EVENT_SYSTEM_DRAGDROPEND Žádný ekvivalent
UDÁLOST_SYSTÉM_TÁHNI_PUSTI_START Žádný ekvivalent
EVENT_SYSTEM_FOREGROUND AutomationFocusChangedEvent
Událost systému: menu ukončeno MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPEND MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPSTART MenuOpenedEvent
EVENT_SYSTEM_MENUSTART MenuOpenedEvent
Událost_SYTÉMU_MINIMALIZACEKONEC WindowVisualStateProperty změna vlastnosti
EVENT_SYSTEM_MINIMIZESTART WindowVisualStateProperty změna vlastnosti
EVENT_SYSTEM_MOVESIZEEND BoundingRectangleProperty změna vlastnosti
EVENT_SYSTEM_MOVESIZESTART BoundingRectangleProperty změna vlastnosti
KONEC_SYSTÉMOVÉHO_POSUVU_EVENT změna vlastností VerticalScrollPercentProperty nebo HorizontalScrollPercentProperty
Událost_Systému_Zahájení_Procházení změna vlastností VerticalScrollPercentProperty nebo HorizontalScrollPercentProperty
UDÁLOST_SYSTÉMOVÝ_ZVUK Žádný ekvivalent
Událost_Systém_Konec_Přepnutí Žádný ekvivalent, ale událost AutomationFocusChangedEvent signalizuje, že nová aplikace získala fokus
Událost_Systém_ZahájeníPřepnutí Žádný ekvivalent
Žádný ekvivalent CurrentViewProperty změna vlastnosti
Žádný ekvivalent HorizontallyScrollableProperty změna vlastnosti
Žádný ekvivalent VerticallyScrollableProperty změna vlastnosti
Žádný ekvivalent HorizontalScrollPercentProperty změna vlastnosti
Žádný ekvivalent VerticalScrollPercentProperty změna vlastnosti
Žádný ekvivalent HorizontalViewSizeProperty změna vlastnosti
Žádný ekvivalent VerticalViewSizeProperty změna vlastnosti
Žádný ekvivalent ToggleStateProperty změna vlastnosti
Žádný ekvivalent WindowVisualStateProperty změna vlastnosti
Žádný ekvivalent událost AsyncContentLoadedEvent
Žádný ekvivalent ToolTipOpenedEvent

Bezpečnost

Některé IAccessible scénáře přizpůsobení vyžadují zapouzdření základu IAccessible a volání na něj. To má vliv na zabezpečení, protože částečně důvěryhodná komponenta by neměla být zprostředkující cestou kódu.

Model automatizace uživatelského rozhraní eliminuje nutnost, aby poskytovatelé používali jiný kód poskytovatele. Základní služba automatizace uživatelského rozhraní provede veškerou potřebnou agregaci.

Viz také

  • základy automatizace uživatelského rozhraní