![]() |
---|
本文档的目标读者是欲使用 System.Windows.Automation 命名空间中定义的托管 UI Automation类的 .NET Framework 开发人员。有关 UI Automation的最新信息,请参见 Windows Automation API: UI Automation(Windows 自动化 API:UI 自动化)。 |
本概述描述如何使用 Microsoft UI Automation来公开支持 UI Automation的平台中文本控件的文本内容,包括格式和样式特性。 这些控件包括但不限于 Microsoft .NET Framework TextBox 和 RichTextBox 及其等效的 Win32 控件。
公开控件的文本内容是通过使用 TextPattern 控件模式完成的,该元素将文本容器的内容表示为文本流。 因此,TextPattern 需要支持 TextPatternRange 类以公开格式和样式特性。 TextPatternRange 通过使用 Start 和 End 终结点的集合表示文本容器中的连续或多个不连续的文本跨度,为 TextPattern 提供支持。 TextPatternRange 支持选择、比较、检索和遍历等功能。
![]() |
---|
TextPattern 类不提供插入或修改文本的方法。但是,根据控件的不同,可以通过 UI Automation ValuePattern 或通过直接键盘输入来实现这一点。有关示例,请参见 ValuePattern Insert Text Sample。 |
此概述中描述的功能对于辅助技术供应商及其最终用户至关重要。 辅助技术可以使用 UI Automation来为用户收集完整的文本格式设置信息,并可以按照 TextUnit(字符、单词、行或段落)提供文本的程序化导航和选择。
本主题包括下列各节。
- UI 自动化 TextPattern 与文本服务框架
- 控件类型
- TextPattern 客户端 API
- TextPattern 提供程序 API
- 安全性
- 性能
- TextPattern 术语
- 相关主题
UI 自动化 TextPattern 与文本服务框架
Text Services Framework (TSF) 是简单的可伸缩系统框架,用于在桌面上和应用程序中启用自然语言服务和高级文本输入。 除了提供应用程序接口以公开其文本存储外,它还支持该文本存储的元数据。
但是,设计的 TSF 所针对的应用程序需要将输入内容插入到可识别上下文的方案中。但 TextPattern 是一个只读解决方案(提供上文所述的有限解决方法),旨在对用于屏幕阅读器和盲文设备的文本存储提供优化的访问。
简而言之,需要对文本存储进行只读访问的辅助技术可以使用 TextPattern,但对于可识别上下文的输入则需要更复杂的 TSF 功能。
控件类型
Text
Text 控件是屏幕上表示文本段的基本元素。
独立的文本控件可用作窗体上的标签或静态文本。 Text 控件还可以包含在 ListItem、TreeItem 或 DataItem 的结构中。
![]() |
---|
Text 控件可能不会出现在 UI Automation树的内容视图中(请参见 UI 自动化树概述)。这是因为文本控件经常通过另一个控件的 Name 属性进行显示。例如,用于标记 Edit 控件的文本就是通过该 Edit 控件的 Name 属性显示的。由于该 Edit 控件位于 UI Automation树的内容视图中,因此不需要文本元素自身位于 UI Automation树的该视图中。显示在内容视图中的文本只是非冗余信息的文本。这样,所有辅助技术都可以快速筛选出只有其用户需要的那些信息段。 |
Edit
Edit 控件使用户可以查看和编辑单行文本。
![]() |
---|
在特定的布局方案中,单行文本可能会换行。 |
Document
Document 控件使用户可以从多个文本页中进行导航及获取信息。
TextPattern 客户端 API
System.Windows.Automation.TextPattern Class |
Microsoft UI Automation文本模型的入口点。 此类还包含两个 TextPattern 事件侦听器:TextSelectionChangedEvent 和 TextChangedEvent。 |
System.Windows.Automation.Text.TextPatternRange Class |
支持 TextPattern 的文本容器内文本范围的表示形式。 UI 自动化客户端应注意使用 TextPatternRange 创建的文本范围的当前有效性。 如果文本控件中的原始文本完全被新文本替换,则当前的文本范围将会失效。 但是,如果只有部分原始文本发生更改并且基础文本控件使用定位点(或终结点)而非绝对字符定位来管理其文本“指针”,则文本范围在一定程度上可能仍然有效。 客户端可以侦听 TextChangedEvent 以获得对其所处理文本内容的任何更改的通知。 |
System.Windows.Automation.AutomationTextAttribute Class |
用于标识文本范围的格式设置特性。 |
TextPattern 提供程序 API
对于通过实现 ITextProvider 和 ITextRangeProvider 接口(自身实现或通过 Microsoft UI Automation代理实现)支持 TextPattern 的 UI 元素或控件,除了能够提供强大的导航功能外,还能够公开其所包含的任何文本的详细特性信息。
如果控件无法支持所有特定的特性,则 TextPattern 提供程序就不必支持所有文本特性。
如果控件支持在文本区域内进行文本选择或文本光标(或系统插入符号)定位,则 TextPattern 提供程序必须支持 GetSelection 和 Select 函数。 如果控件不支持这些功能,则不必要支持其中的任何一种方法。 但是,控件必须通过实现 SupportedTextSelection 属性来公开它所支持的文本选择类型。
TextPattern 提供程序必须始终支持 TextUnit 常数 Character 和 Document,以及它能够支持的任何其他 TextUnit 常数。
![]() |
---|
提供程序可以通过按以下顺序使用受支持的第二大 TextUnit 来跳过对特定 TextUnit 的支持:Character、Format、Word、Line、Paragraph、Page 和 Document。 |
ITextProvider Interface |
公开支持客户端应用程序中的 TextPattern 的方法、属性和特性(请参见 ITextProvider)。 |
ITextRangeProvider Interface |
表示文本提供程序中的文本范围(请参见 ITextRangeProvider)。 |
System.Windows.Automation.TextPatternIdentifiers Class |
包含用作文本提供程序标识符的值(请参见 TextPatternIdentifiers)。 |
安全性
在设计 UI Automation体系结构时考虑了安全性(请参见 UI 自动化安全性概述)。 但是,本概述中描述的 TextPattern 类需要考虑一些特定的安全注意事项。
Microsoft UI Automation文本提供程序提供只读接口,不提供更改控件中现有文本的功能。
如果 UI 自动化客户端完全“受信任”,则它们只能使用 Microsoft UI Automation。 例如受保护的登录桌面,其中只有已知的受信任应用程序可以运行。
UI 自动化提供程序的开发人员应该意识到,他们选择通过 Microsoft UI Automation在其控件中公开的所有信息实质上是公共信息,可由其他代码进行完全访问。 Microsoft UI Automation对于确定任何 UI 自动化客户端的可信度并不起任何作用,因此 UI 自动化提供程序不应公开受保护的内容或敏感的文本信息(如密码字段)。
对 Windows Vista 的安全性进行的一项最重大更改通常称为“安全输入”,它包括最少特权(或受限制)用户帐户 (LUA) 和 UI 特权等级隔离 (UIPI) 等技术。
UIPI 防止一个程序控制和/或监控另一个具有更多“特权”的程序,防止欺骗用户输入的跨进程窗口消息攻击。
LUA 对 Administrators 组中用户所运行应用程序的特权设置限制。 应用程序不一定具有管理员特权,而是将使用必需的最少特权运行。 因此,在 LUA 方案中可能实施了一些限制。 最值得注意的是字符串截断(包括 TextPattern 字符串),其中可能必须限制从管理员级别应用程序检索的字符串大小,以便不会强制它们将内存分配到禁用该应用程序的程度。
性能
由于 TextPattern 的大多数功能都依赖于跨进程调用,因此它在处理内容时不提供缓存机制来改善性能。 这与 Microsoft UI Automation中可使用 GetCachedPattern 或 TryGetCachedPattern 方法访问的其他控件模式不同。
提高性能的一种策略是确保 UI 自动化客户端尝试使用 GetText 检索中等大小的文本块。 例如,GetText(1) 调用将对每个字符产生跨进程命中,而一个 GetText(-1) 调用将产生一个跨进程命中,但根据文本提供程序的大小可以具有较长的滞后时间。
TextPattern 术语
特性
文本范围的格式设置特性(例如,IsItalicAttribute 或 FontNameAttribute)。退化范围
退化范围是空的文本范围或零字符文本范围。 对 TextPattern 控件模式来说,文本插入点(或系统插入符号)被视为一个退化范围。 如果未选择文本,则 GetSelection 将在文本插入点处返回退化范围,而 RangeFromPoint 将返回退化范围作为其起始终结点。 在文本提供程序找不到与给定条件匹配的任何文本范围时,RangeFromChild 和 GetVisibleRanges 可能会返回退化范围。 此退化范围可用作文本提供程序中的起始终结点。 FindText 和 FindAttribute 返回空引用(在 Microsoft Visual Basic .NET 中为 Nothing)以避免将发现的范围与退化范围相混淆。嵌入对象
UI Automation文本模型中有两种类型的嵌入对象。 它们由基于文本的内容元素(如超链接或表)和控件元素(如图像和按钮)组成。 有关更多详细信息,请参见使用 UI 自动化访问嵌入式对象。
下面演示了一组起点和终点。
TextRange
文本容器中具有起点和终点的文本范围的表示形式,包括所有关联的特性和功能。TextUnit
用于在文本范围的逻辑段中进行导航的预定义文本单元(字符、单词、行或段落)。