Automatizace uživatelského rozhraní a technologie 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 model UI Automation definované v System.Windows.Automation oboru názvů. Nejnovější informace o model UI Automation najdete v tématu Rozhraní API služby Windows Automation: model UI Automation.
Microsoft Active Accessibility byl dřívějším řešením pro zpřístupnění aplikací. Microsoft model 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ů. model UI Automation nabízí mnoho vylepšení v režimu aktivní přístupnosti.
Toto téma obsahuje hlavní funkce model UI Automation a vysvětluje, jak se tyto funkce liší od funkce Aktivní přístupnost.
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. model UI Automation (včetně knihovny zprostředkovatele na straně klienta pro standardní ovládací prvky) je napsaná ve spravovaném kódu a model UI Automation klientské aplikace jsou nejsnážněji naprogramované pomocí jazyka C# nebo Visual Basic .NET. model UI Automation zprostředkovatelé, které jsou implementacemi rozhraní, lze 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í však model UI Automation, což zahrnuje podporu přemostění klientů active accessibility. Pouze klienti napsaní speciálně pro model UI Automation můžou plně využívat funkce přístupnosti WPF, jako je podpora formátovaného textu.
Servery a klienti
V aktivní přístupnosti komunikují servery a klienti přímo prostřednictvím implementace IAccessible
serveru .
V model UI Automation základní služba leží mezi serverem (označovaným jako poskytovatel) a klientem. Základní služba volá rozhraní implementovaná poskytovateli a poskytuje další služby, jako je generování jedinečných identifikátorů modulu runtime pro prvky. Klientské aplikace používají funkce knihovny k volání model UI Automation služby.
model UI Automation můžou poskytovatelé poskytovat informace klientům služby Active Accessibility a servery active accessibility můžou poskytovat informace model UI Automation klientským aplikacím. Vzhledem k tomu, že aktivní přístupnost nezpřístupňuje tolik informací jako model UI Automation, nejsou tyto dva modely plně kompatibilní.
Prvky uživatelského rozhraní
Aktivní přístupnost představuje prvky uživatelského rozhraní buď jako IAccessible
rozhraní, nebo jako podřízený identifikátor. Je obtížné porovnat dva IAccessible
ukazatele určit, zda odkazují na stejný prvek.
V model UI Automation je každý prvek reprezentován jako AutomationElement objekt. Porovnání se provádí pomocí operátoru Equals rovnosti nebo metody, z nichž obě porovnávají jedinečné identifikátory modulu runtime 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 se musí podívat na všechny prvky, které mají smysl určit.
model UI Automation klientské aplikace uvidí 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í. model UI Automation zjednodušuje popis uživatelského rozhraní uživateli a pomáhá uživateli pracovat s aplikací.
Navigace mezi prvky, které jsou v aktivní přístupnosti, je prostorová (například přechod na prvek, který leží vlevo na obrazovce), logický (například přechod na další položku nabídky nebo další položku v pořadí ovládacích prvků v dialogovém okně) nebo hierarchický (například přesunutí prvního podřízeného prvku v kontejneru nebo z podřízené položky do nadřazeného prvku). Hierarchická navigace je komplikovaná skutečností, že podřízené prvky nejsou vždy objekty, které implementují IAccessible
.
V model UI Automation jsou AutomationElement všechny prvky uživatelského rozhraní objekty, které podporují stejné základní funkce. (Z hlediska poskytovatele jsou objekty, které implementují rozhraní zděděné z IRawElementProviderSimple.) Navigace je hlavně hierarchická: od rodičů k podřízeným a od jednoho na stejné straně k dalšímu. (Navigace mezi elementy na stejné úrovni má logický prvek, protože může následovat podle pořadí ovládacích prvků.) Pomocí libovolného výchozího bodu můžete pomocí libovolného filtrovaného zobrazení stromu TreeWalker použít třídu. Můžete také přejít na konkrétní podřízené nebo potomky pomocí a FindFirstFindAll; například je velmi snadné načíst všechny prvky v dialogovém okně, které podporují zadaný vzor ovládacího prvku.
Navigace v model UI Automation je konzistentnější než v režimu aktivní přístupnosti. 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. model UI Automation umožňuje přeusťování a přemísťování, aby prvek mohl být umístěn kdekoli ve stromu 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 prvek se dosahuje pomocí pevných metod, jako IAccessible::accSelect
IAccessible::accDoDefaultAction
jsou a . Interakce mezi klientskou aplikací a uživatelským rozhraním je omezená na to, co lze provést prostřednictvím IAccessible
.
Naproti tomu model UI Automation do značné míry oddělí 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. K podpoře jedné nebo více množiny řídicích vzorů se vyžadují další poskytovatelé; Například tlačítko musí podporovat přepínač nebo vyvolat. 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ů.
model UI Automation podporuje vlastní ovládací prvky, které jsou identifikované Custom vlastností a mohou být popsány vlastnostíLocalizedControlTypeProperty.
Následující tabulka ukazuje mapování rolí aktivní přístupnosti na model UI Automation typy ovládacích prvků.
Aktivní role přístupnosti | typ ovládacího prvku model UI Automation |
---|---|
ROLE_SYSTEM_PUSHBUTTON | Tlačítko |
ROLE_SYSTEM_CLIENT | Calendar |
ROLE_SYSTEM_CHECKBUTTON | Zašk.políčko |
ROLE_SYSTEM_COMBOBOX | Kombinované pole |
ROLE_SYSTEM_CLIENT | Vlastní |
ROLE_SYSTEM_LIST | Datová mřížka |
ROLE_SYSTEM_LISTITEM | Datová položka |
ROLE_SYSTEM_DOCUMENT | Dokument |
ROLE_SYSTEM_TEXT | Upravit |
ROLE_SYSTEM_GROUPING | Seskupit |
ROLE_SYSTEM_LIST | Hlavička |
ROLE_SYSTEM_COLUMNHEADER | Položka záhlaví |
ROLE_SYSTEM_LINK | Hypertextový odkaz |
ROLE_SYSTEM_GRAPHIC | Image |
ROLE_SYSTEM_LIST | List |
ROLE_SYSTEM_LISTITEM | Položka seznamu |
ROLE_SYSTEM_MENUPOPUP | Nabídka |
ROLE_SYSTEM_MENUBAR | Nabídek |
ROLE_SYSTEM_MENUITEM | Položka nabídky |
ROLE_SYSTEM_PANE | Podokno |
ROLE_SYSTEM_PROGRESSBAR | Indikátor průběhu |
ROLE_SYSTEM_RADIOBUTTON | Radio button |
ROLE_SYSTEM_SCROLLBAR | Posuvník |
ROLE_SYSTEM_SEPARATOR | Oddělovač |
ROLE_SYSTEM_SLIDER | Posuvník |
ROLE_SYSTEM_SPINBUTTON | Rotující indikátor průběhu |
ROLE_SYSTEM_SPLITBUTTON | Tlačítko Rozdělit |
ROLE_SYSTEM_STATUSBAR | Stavovém |
ROLE_SYSTEM_PAGETABLIST | Tab |
ROLE_SYSTEM_PAGETAB | Položka karty |
ROLE_SYSTEM_TABLE | Table |
ROLE_SYSTEM_STATICTEXT | Text |
ROLE_SYSTEM_INDICATOR | Jezdec |
ROLE_SYSTEM_TITLEBAR | Záhlaví |
ROLE_SYSTEM_TOOLBAR | Panel nástrojů |
ROLE_SYSTEM_TOOLTIP | Popisy tlačítek |
ROLE_SYSTEM_OUTLINE | Strom |
ROLE_SYSTEM_OUTLINEITEM | Položka stromu |
ROLE_SYSTEM_WINDOW | Okno |
Další informace o různých typech ovládacích prvků najdete v tématu model UI Automation Typy ovládacích prvků.
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.
model UI Automation definuje mnoho dalších vlastností, z nichž některé odpovídají stavům v 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 Current přístupových objektů a Cached vlastností.
Zprostředkovatel model UI Automation nemusí implementovat irelevantní vlastnosti, ale může jednoduše vrátit null
hodnotu pro všechny vlastnosti, které nepodporuje. Základní služba model UI Automation může také získat některé vlastnosti od výchozího zprostředkovatele okna a jsou amalgamované s vlastnostmi explicitně implementovanými poskytovatelem.
Stejně jako podpora mnoha dalších vlastností poskytuje model UI Automation lepší výkon tím, že umožňuje načtení více vlastností s jedním voláním mezi procesy.
Následující tabulka ukazuje korespondenci mezi vlastnostmi v těchto dvou modelech.
Přístup k vlastnostem aktivní přístupnosti | ID vlastnosti model UI Automation | 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 |
V model UI Automation se nepodporuje | 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 |
V model UI Automation se nepodporuje |
Následující tabulka ukazuje, které vlastnosti model UI Automation odpovídají konstantám stavu aktivní přístupnosti.
Stav aktivní přístupnosti | vlastnost model UI Automation | Aktivuje změnu stavu? |
---|---|---|
STATE_SYSTEM_CHECKED | Zaškrtávací políčko ToggleStateProperty Pro přepínač, IsSelectedProperty |
Y |
STATE_SYSTEM_COLLAPSED | ExpandCollapseState = Collapsed | Y |
STATE_SYSTEM_EXPANDED | ExpandCollapseState = Expanded nebo PartiallyExpanded | Y |
STATE_SYSTEM_FOCUSABLE | IsKeyboardFocusableProperty | N |
STATE_SYSTEM_FOCUSED | HasKeyboardFocusProperty | N |
STATE_SYSTEM_HASPOPUP | ExpandCollapsePattern pro položky nabídky | N |
STATE_SYSTEM_INVISIBLE | IsOffscreenProperty = Pravda a GetClickablePoint příčiny 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 = Pravda | N |
STATE_SYSTEM_PROTECTED | IsPasswordProperty | N |
STATE_SYSTEM_READONLY | RangeValuePattern.IsReadOnlyProperty a ValuePattern.IsReadOnlyProperty | N |
STATE_SYSTEM_SELECTABLE | SelectionItemPattern je podporováno. | N |
STATE_SYSTEM_SELECTED | IsSelectedProperty | N |
STATE_SYSTEM_SIZEABLE | CanResize | N |
STATE_SYSTEM_UNAVAILABLE | IsEnabledProperty | Y |
Následující stavy buď nebyly implementovány většinou serverů řízení přístupnosti, nebo nemají v model UI Automation žádný ekvivalent.
Stav aktivní přístupnosti | Poznámky |
---|---|
STATE_SYSTEM_BUSY | Není k dispozici v model UI Automation |
STATE_SYSTEM_DEFAULT | Není k dispozici v model UI Automation |
STATE_SYSTEM_ANIMATED | Není k dispozici v model UI Automation |
STATE_SYSTEM_EXTSELECTABLE | 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é |
STATE_SYSTEM_TRAVERSED | Není k dispozici v model UI Automation |
STATE_SYSTEM_ALERT_HIGH | Servery s aktivní přístupností nejsou široce implementované |
STATE_SYSTEM_ALERT_MEDIUM | Servery s aktivní přístupností nejsou široce implementované |
STATE_SYSTEM_ALERT_LOW | Servery s aktivní přístupností nejsou široce implementované |
STATE_SYSTEM_FLOATING | Servery s aktivní přístupností nejsou široce implementované |
STATE_SYSTEM_HOTTRACKED | Není k dispozici v model UI Automation |
STATE_SYSTEM_PRESSED | Není k dispozici v model UI Automation |
Úplný seznam identifikátorů vlastností model UI Automation najdete v tématu model UI Automation Přehled vlastností.
Událost
Mechanismus událostí v model UI Automation, na rozdíl od toho, že v active accessibility, nespoléhá na směrování událostí Systému Windows (které je úzce svázané s popisovači oken) a nevyžaduje klientské aplikace k nastavení připojení. Odběry událostí je možné doladit nejen na konkrétní události, ale i na konkrétní části stromu. Poskytovatelé můžou také doladit své zvyšování událostí tím, že sledují, jaké události se naslouchají.
Klienti také snadněji načtou prvky, které vyvolávají události, protože se předávají přímo zpětnému 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 uvádí korespondenci událostí WinEvents a model UI Automation přístupnosti.
WinEvent | identifikátor události model UI Automation |
---|---|
EVENT_OBJECT_ACCELERATORCHANGE | AcceleratorKeyProperty změna vlastnosti |
EVENT_OBJECT_CONTENTSCROLLED | VerticalScrollPercentProperty nebo HorizontalScrollPercentProperty změna vlastnosti u přidružených posuvníků |
EVENT_OBJECT_CREATE | StructureChangedEvent |
EVENT_OBJECT_DEFACTIONCHANGE | Žádný ekvivalent |
EVENT_OBJECT_DESCRIPTIONCHANGE | Žádný přesný ekvivalent; možná HelpTextProperty nebo LocalizedControlTypeProperty změna vlastnosti |
EVENT_OBJECT_DESTROY | StructureChangedEvent |
EVENT_OBJECT_FOCUS | AutomationFocusChangedEvent |
EVENT_OBJECT_HELPCHANGE | HelpTextProperty Změnit |
EVENT_OBJECT_HIDE | StructureChangedEvent |
EVENT_OBJECT_LOCATIONCHANGE | BoundingRectangleProperty změna vlastnosti |
EVENT_OBJECT_NAMECHANGE | NameProperty změna vlastnosti |
EVENT_OBJECT_PARENTCHANGE | StructureChangedEvent |
EVENT_OBJECT_REORDER | Nepoužívá se konzistentně v režimu aktivní přístupnosti. V model UI Automation není definována žádná přímo odpovídající událost. |
EVENT_OBJECT_SELECTION | ElementSelectedEvent |
EVENT_OBJECT_SELECTIONADD | ElementAddedToSelectionEvent |
EVENT_OBJECT_SELECTIONREMOVE | ElementRemovedFromSelectionEvent |
EVENT_OBJECT_SELECTIONWITHIN | Žádný ekvivalent |
EVENT_OBJECT_SHOW | StructureChangedEvent |
EVENT_OBJECT_STATECHANGE | Různé události změněné vlastností |
EVENT_OBJECT_VALUECHANGE | RangeValuePattern.ValueProperty a ValuePattern.ValueProperty změněno |
EVENT_SYSTEM_ALERT | Žádný ekvivalent |
EVENT_SYSTEM_CAPTUREEND | Žádný ekvivalent |
EVENT_SYSTEM_CAPTURESTART | Žádný ekvivalent |
EVENT_SYSTEM_CONTEXTHELPEND | Žádný ekvivalent |
EVENT_SYSTEM_CONTEXTHELPSTART | Žádný ekvivalent |
EVENT_SYSTEM_DIALOGEND | WindowClosedEvent |
EVENT_SYSTEM_DIALOGSTART | WindowOpenedEvent |
EVENT_SYSTEM_DRAGDROPEND | Žádný ekvivalent |
EVENT_SYSTEM_DRAGDROPSTART | Žádný ekvivalent |
EVENT_SYSTEM_FOREGROUND | AutomationFocusChangedEvent |
EVENT_SYSTEM_MENUEND | MenuClosedEvent |
EVENT_SYSTEM_MENUPOPUPEND | MenuClosedEvent |
EVENT_SYSTEM_MENUPOPUPSTART | MenuOpenedEvent |
EVENT_SYSTEM_MENUSTART | MenuOpenedEvent |
EVENT_SYSTEM_MINIMIZEEND | 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 |
EVENT_SYSTEM_SCROLLINGEND | VerticalScrollPercentProperty nebo HorizontalScrollPercentProperty změna vlastnosti |
EVENT_SYSTEM_SCROLLINGSTART | VerticalScrollPercentProperty nebo HorizontalScrollPercentProperty změna vlastnosti |
EVENT_SYSTEM_SOUND | Žádný ekvivalent |
EVENT_SYSTEM_SWITCHEND | Žádný ekvivalent, ale AutomationFocusChangedEvent signály událostí, že nová aplikace obdržela fokus |
EVENT_SYSTEM_SWITCHSTART | Žá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 | AsyncContentLoadedEvent Událost |
Žádný ekvivalent | ToolTipOpenedEvent |
Zabezpečení
Některé IAccessible
scénáře přizpůsobení vyžadují zabalení základu IAccessible
a volání do 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 model UI Automation eliminuje potřebu, aby poskytovatelé volali do jiného kódu zprostředkovatele. Základní služba model UI Automation provede veškerou potřebnou agregaci.