控件模型概览
控件模型提取出了各种不同类型不同长相的控件的公有行为模型,将之归纳为多种控件模型。UIA使用控件模型表示控件公有行为。比如,可以使用invoke控件模型来操作可被invoke的控件(BUTTON),可以使用scroll控件模型操作有scroll bar的控件(list box,list views,combo box)。每种控件模型代表了一类控件功能,某些特别的控件会拥有多种控件模型。
UI Automation Control Patterns Overview
UIA 控件模型中描述了定义控件中的各种离散功能的方法、属性、事件以及控件之间的关系。
控件关系:在UIA控件树种,UIA 元素与其父节点、子节点、兄弟节点的关系
控件方法:提供给UIA client调用来操作控件的方法
控件属性和事件:提供出控件模型的功能和控件状态
控件模型之与UI就如同接口之与COM对象,在COM中,你可以查询到对象,拿到它所提供的接口,然后利用接口去实现想要的功能。在UIA中,UIA client可以从控件中去查询控件所支持的控件模型,然后通过控件模型的属性、方法、时间以及结构来和控件交互。例如,对一个多行编辑框,UIA provider实现了iScrollProvider,所以UIA client可以使用Scroll pattern的方法、属性、事件来操纵这个控件以及从控件中获取信息。
UI Automation Providers and Clients
如上所述,UIA provider要实现control pattern,UIA client才能通过各种control pattern来控制控件和获取控件属性。
UIA client可以使用AutomationELement的方法(AutomationElement.GetCurrentPropertyValue或者AutomationElement.GetCachedPropertyValue)来获取控件的运行时属性。每个control pattern class都有一个域成员(InvokePattern.PatternorSelectionPattern.Pattern)来标识control pattern,这个成员也可以作为getCachedPattern或者GetCurrentPattern的参数。
var button=window.FindFirst(TreeScope.Children, btnCondition);
var clickPattern=(InvokePattern)button.GetCurrentPattern(InvokePattern.Pattern);
clickPattern.Invoke();
Dynamic Control Patterns
有些控件并不总是能支持特定的控件模型。比如,多行编辑框中的scroll ,只有当编辑框中的文字有多行时才会出现,当编辑框没有文字时,scroll处于禁用状态。所以,控件支持的控件模型是伴随控件的状态而动态变化的。
Control Pattern Classes and Interfaces
UIA中定义了38种控件模型,下面列举了常用的控件模型。