Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í.
Toto téma představuje ukládání vlastností automatizace uživatelského rozhraní a vzorů ovládacích prvků do mezipaměti.
V automatizaci uživatelského rozhraní znamená ukládání do mezipaměti předběžné načtení dat. K datům se pak dostanete bez další komunikace mezi procesy. Ukládání do mezipaměti se obvykle používá klientskými aplikacemi automatizace uživatelského rozhraní k hromadnému načítání vlastností a vzorů ovládacích prvků. Informace se pak podle potřeby načtou z mezipaměti. Aplikace pravidelně aktualizuje mezipaměť, obvykle v reakci na události, které značí, že se něco v uživatelském rozhraní změnilo.
Výhody ukládání do mezipaměti jsou nejvýraznější díky ovládacím prvkům Windows Presentation Foundation (WPF) a vlastním ovládacím prvkům, které mají poskytovatele automatizace uživatelského rozhraní na straně serveru. Při přístupu k poskytovatelům na straně klienta, jako jsou výchozí zprostředkovatelé pro ovládací prvky Win32, je méně výhod.
Ukládání do mezipaměti se nastane, když aplikace aktivuje CacheRequest a pak použije jakoukoli metodu nebo vlastnost, která vrací AutomationElement, FindFirst nebo FindAll. Metody třídy TreeWalker jsou výjimkou; ukládání do mezipaměti se provádí pouze v případě, že je CacheRequest zadán jako parametr (například TreeWalker.GetFirstChild(AutomationElement, CacheRequest)).
K ukládání do mezipaměti dochází také v případě, že se přihlásíte k odběru události, když CacheRequest je aktivní. AutomationElement předaná do zpracovatele události jako zdroj události obsahuje vlastnosti v mezipaměti a vzory určené původním CacheRequest. Jakékoli změny provedené na CacheRequest po přihlášení k události nemají žádný vliv.
Vlastnosti automatizace uživatelského rozhraní a vzory ovládacích prvků lze uložit do mezipaměti.
Možnosti ukládání do mezipaměti
Určuje CacheRequest následující možnosti ukládání do mezipaměti.
Vlastnosti k ukládání do mezipaměti
Vlastnosti, které se mají ukládat do mezipaměti, můžete zadat voláním Add(AutomationProperty) každé vlastnosti před aktivací požadavku.
Vzorové šablony pro ukládání do mezipaměti
Řídicí vzory, které se mají ukládat do mezipaměti, můžete zadat voláním Add(AutomationPattern) jednotlivých vzorů před aktivací požadavku. Pokud je vzor uložen v mezipaměti, jeho vlastnosti se automaticky neukládají do mezipaměti; je nutné zadat vlastnosti, které chcete uložit do mezipaměti pomocí .CacheRequest.Add
Rozsah a filtrování ukládání do mezipaměti
Můžete zadat prvky, jejichž vlastnosti a vzory chcete uložit do mezipaměti, nastavením CacheRequest.TreeScope vlastnosti před aktivací požadavku. Rozsah je relativní ve vztahu k prvkům, které jsou načítány, když je požadavek aktivní. Pokud například nastavíte pouze Children, a pak načtete AutomationElement, vlastnosti a vzory podřízených objektů tohoto prvku jsou uloženy v mezipaměti, ale nikoli vlastnosti samotného prvku. Pokud chcete zajistit, aby se ukládání do mezipaměti provádělo pro samotný načtený prvek, musíte zahrnout Element do TreeScope vlastnosti. Rozsah není možné nastavit na Parent nebo Ancestors. Nadřazený prvek však může být uložen do mezipaměti při ukládání podřízeného elementu do mezipaměti. Další informace naleznete v tématu Načítání podřízených a nadřazených objektů uložených v mezipaměti.
Rozsah ukládání do mezipaměti je také ovlivněn vlastností CacheRequest.TreeFilter . Ve výchozím nastavení se ukládání do mezipaměti provádí pouze pro prvky, které se zobrazují v zobrazení ovládacího prvku stromu Automatizace uživatelského rozhraní. Tuto vlastnost však můžete změnit tak, aby se ukládání do mezipaměti použilo pro všechny prvky, nebo pouze na prvky, které se zobrazují v zobrazení obsahu.
Síla odkazů na elementy
Při načtení objektu AutomationElement, ve výchozím nastavení máte přístup ke všem vlastnostem a vzorům tohoto prvku, včetně těch, které nebyly uloženy v mezipaměti. Pro větší efektivitu můžete určit, že odkaz na prvek odkazuje pouze na data uložená v mezipaměti, nastavením vlastnosti AutomationElementMode u CacheRequest na hodnotu None. V tomto případě nemáte přístup k žádným vlastnostem a vzorům načtených prvků, které nejsou uložené v mezipaměti. To znamená, že nemáte přístup k žádným vlastnostem prostřednictvím GetCurrentPropertyValue nebo vlastnosti Current
objektu AutomationElement či jakéhokoli ovládacího vzoru; a vzor nelze načíst pomocí GetCurrentPattern nebo TryGetCurrentPattern. U vzorů uložených v mezipaměti můžete volat metody, které načítají vlastnosti pole, například SelectionPattern.SelectionPatternInformation.GetSelection, ale ne žádné, které provádějí akce na ovládacím prvku, například InvokePattern.Invoke.
Příkladem aplikace, která nemusí potřebovat úplné odkazy na objekty, je čtečka obrazovky, která by předběžně načítala Name a ControlType vlastnosti prvků v okně, ale samotné objekty AutomationElement by nepotřebovala.
Aktivace CacheRequest
Mezipaměť ukládá pouze tehdy, když jsou načteny AutomationElement objekty a CacheRequest je aktivní pro aktuální vlákno. Existují dva způsoby, jak aktivovat CacheRequest.
Obvyklým způsobem je volat Activate. Tato metoda vrátí objekt, který implementuje IDisposable. Požadavek zůstane aktivní, dokud IDisposable objekt existuje. Nejjednodušší způsob, jak řídit životnost objektu, je uzavřít volání do using
bloku (C#) nebo Using
(Visual Basic). Tím se zajistí, že se požadavek ze zásobníku odstraní, i když dojde k výjimce.
Dalším způsobem, který je užitečný, pokud chcete vnořit požadavky na mezipaměť, je použít Push. Tím se požadavek vloží do zásobníku a poté se aktivuje. Požadavek zůstává aktivní, dokud jej Pop neodstraní ze zásobníku. Požadavek bude dočasně neaktivní, pokud se do zásobníku odešle jiný požadavek; Aktivní je pouze horní požadavek v zásobníku.
Načítání vlastností uložených v mezipaměti
Vlastnosti elementu uložené v mezipaměti můžete načíst následujícími metodami a vlastnostmi.
Výjimka se vyvolá, pokud požadovaná vlastnost není v mezipaměti.
Cached, například Current, zveřejňuje jednotlivé vlastnosti jako členy struktury. Tuto strukturu však nemusíte načítat; k jednotlivým vlastnostem můžete přistupovat přímo. Vlastnost Name lze například získat z element.Cached.Name
, kde element
je AutomationElement.
Načítání vzorů ovládacích prvků uložených v mezipaměti
Vzory ovládacích prvků uložených v mezipaměti můžete načíst pomocí následujících metod.
Pokud vzor není v mezipaměti, GetCachedPattern vyvolá výjimku a TryGetCachedPattern vrátí false
.
Vlastnosti ovládacího prvku uložené v mezipaměti můžete načíst pomocí Cached
vlastnosti objektu vzoru. Můžete také načíst aktuální hodnoty prostřednictvím vlastnosti Current
, ale pouze pokud nebyl None zadán při načtení AutomationElement. (Full je výchozí hodnota a to umožňuje přístup k aktuálním hodnotám.)
Získávání objektů dítěte a rodiče v mezipaměti
Když načtete AutomationElement a vyžádáte ukládání do mezipaměti pro podřízené položky tohoto prvku prostřednictvím TreeScope vlastnosti požadavku, je následně možné získat podřízené prvky z CachedChildren vlastnosti prvku, který jste získali.
Pokud Element byl zahrnut v rozsahu požadavku mezipaměti, kořenový prvek požadavku je následně k dispozici z CachedParent vlastnosti libovolného podřízeného elementu.
Poznámka:
Nadřazené prvky nebo předchůdce kořenového prvku požadavku nelze ukládat do mezipaměti.
Aktualizace mezipaměti
Mezipaměť je platná pouze za předpokladu, že se v uživatelském rozhraní nic nezmění. Vaše aplikace zodpovídá za aktualizaci mezipaměti, obvykle v reakci na události.
Pokud se přihlásíte k odběru události, když je CacheRequest aktivní, získáte AutomationElement s aktualizovanou mezipamětí jako zdrojem události při každém zavolání delegáta zpracování události. Informace uložené v mezipaměti pro prvek můžete aktualizovat také voláním GetUpdatedCache. Původní CacheRequest můžete předat, abyste aktualizovali všechny informace, které byly dříve ukládány v cache.
Aktualizace mezipaměti nemění vlastnosti existujících AutomationElement odkazů.
Viz také
- Události automatizace uživatelského rozhraní pro klienty
- Použití ukládání do mezipaměti v automatizaci uživatelského rozhraní
- Ukázka FetchTimer