Školení
Modul
Use Power Automate for desktop to interact with windows and applications - Training
Learn how Power Automate for desktop identifies and interacts with UI elements and windows.
Tento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Toto téma popisuje běžné scénáře podprocesů pro implementace klienta Microsoft UI Automation a vysvětluje, jak se vyhnout problémům, ke kterým může dojít, pokud klient používá nesprávně podprocesy.
Toto téma obsahuje následující části:
Kvůli způsobu, jakým automatizace uživatelského rozhraní používá zprávy systému Windows, může dojít ke konfliktům, když se klientská aplikace pokusí pracovat s vlastním uživatelským rozhraním ve vlákně uživatelského rozhraní. Tyto konflikty můžou vést k velmi pomalému výkonu nebo dokonce způsobit, že aplikace přestane reagovat.
Pokud má vaše klientská aplikace pracovat se všemi prvky na ploše, včetně vlastního uživatelského rozhraní, měli byste všechna volání automatizace uživatelského rozhraní provádět ze samostatného vlákna. To zahrnuje vyhledání prvků, například pomocí IUIAutomationTreeWalker nebo IUIAutomationElement::FindAll metoda a použití vzorů ovládacích prvků. Toto vlákno by nemělo vlastnit žádná okna a mělo by to být vlákno modelu COM (Component Object Model) Multithreaded Apartment (MTA) (jedno, které inicializuje com voláním CoInitializeEx s příznakem COINIT_MULTITHREADED.)
V obslužné rutině události Automatizace uživatelského rozhraní je bezpečné provádět volání automatizace uživatelského rozhraní, protože obslužná rutina události se vždy volá ve vlákně bez uživatelského rozhraní. Pokud se však přihlašujete k odběru událostí, které mohou pocházet z uživatelského rozhraní klientské aplikace, musíte provést volání IUIAutomation::AddAutomationEventHandlernebo související metodu ve vlákně bez uživatelského rozhraní (což by také mělo být vlákno MTA). Odeberte obslužné rutiny událostí ve stejném vlákně.
Klient automatizace uživatelského rozhraní by neměl používat více vláken k přidání nebo odebrání obslužných rutin událostí. Neočekávané chování může vést k tomu, že se přidává nebo odebírá jedna obslužná rutina událostí, zatímco se přidává nebo odebírá jiná obslužná rutina ve stejném procesu klienta.
Klient automatizace uživatelského rozhraní by měl používat model vláken COM MTA pro vlákna, která implementují obslužné rutiny událostí. Použití modelu STA (Single-Threaded Apartment) může způsobit problémy, jako je například zabránění klientům v odebrání obslužných rutin událostí z vlákna.
Podle specifikace MODELU COM se životnost vzdáleného objektu řídí životností bytu, ve kterém je volána funkce CoCreateInstance k vytvoření objektu. Když se původní byt vypne, uvolní se také vzdálený objekt.
U klientů automatizace uživatelského rozhraní může toto chování modelu COM znamenat, že životnost vzdáleného pomocníka 32/64 (vytvořeného UIAutomationCore.dll) používaného 32bitovým prvkem se řídí životností vlákna, které vytvořilo prvek. Pokud klient automatizace uživatelského rozhraní předá prvek do jiného vlákna, může se stát neplatným, když se původní úsek ukončí. Klient automatizace uživatelského rozhraní by měl tyto problémy řádně zpracovat zachycením chyb při používání zařazovaných prvků automatizace.
Stejný problém může nastat u 32bitového klienta automatizace uživatelského rozhraní, který má 64bitové prvky.
Koncepční:
získání prvků automatizace uživatelského rozhraní
přihlášení k odběru událostí automatizace uživatelského rozhraní
Přehled událostí automatizace uživatelského rozhraní
další zdroje:
Školení
Modul
Use Power Automate for desktop to interact with windows and applications - Training
Learn how Power Automate for desktop identifies and interacts with UI elements and windows.
Dokumentace
Potíže s vlákny při automatizaci uživatelského rozhraní - .NET Framework
Přečtěte si o problémech s model UI Automation vlákny. Ke konfliktům může dojít například v případě, že se klientská aplikace pokusí pracovat s vlastním uživatelským rozhraním ve vlákně uživatelského rozhraní.