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