UI 自动化 TextPattern 概述

注释

本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化

本概述介绍如何使用 Microsoft UI 自动化在支持 UI 自动化的平台中展示文本控件的文本内容,包括格式和样式属性。 这些控件包括但不限于 Microsoft .NET Framework TextBox 和 Win32 RichTextBox 等效项。

通过使用 TextPattern 控件模式来实现控件的文本内容公开,该模式将文本容器的内容表示为文本流。 反过来,TextPattern 需要 TextPatternRange 类的支持来公开格式和样式属性。 TextPatternRange 通过采用一系列 TextPatternStart 终结点表示文本容器中连续或多个不连续的的文本段来支持 EndTextPatternRange 支持选择、比较、检索和遍历等功能。

注释

这些 TextPattern 类不提供插入或修改文本的方法。 但是,根据控件,这可以通过 UI 自动化 ValuePattern 或通过直接键盘输入来实现。 有关示例,请参阅 TextPattern 插入文本示例

此概述中所述的功能对于辅助技术供应商及其最终用户至关重要。 辅助技术可以使用 UI 自动化为用户收集完整的文本格式信息,并通过 TextUnit 以字符、单词、行或段落为单位进行文本的编程导航和选择。

UI 自动化 TextPattern 与文本服务框架

文本服务框架(TSF)是一个简单且可缩放的系统框架,可在桌面和应用程序中实现自然语言服务和高级文本输入。 除了为应用程序提供接口来公开其文本存储外,它还支持该文本存储的元数据。

但是,TSF 适用于需要将输入注入到上下文感知的情境中,而 TextPattern 是只读解决方案(如上所示,具有有限的解决方法),用于提供对屏幕阅读器和盲文设备的文本存储的优化访问。

简单来说,需要对文本存储的只读访问权限的可访问技术可以使用 TextPattern,但对于上下文感知输入则需要更复杂的 TSF 功能。

控件类型

文本

文本控件是表示屏幕上一段文本的基本元素。

独立文本控件可用作窗体上的标签或静态文本。 文本控件也可以包含在一个ListItemTreeItemDataItem的结构中。

注释

文本控件可能不会显示在 UI 自动化树的内容视图中(请参阅 UI 自动化树概述)。 这是因为文本控件通常通过另一个控件的 Name 属性显示。 例如,用于标记“编辑”控件的文本通过“编辑”控件的 Name 属性公开。 由于“编辑”控件位于 UI 自动化树的内容视图中,因此不需要文本元素本身位于 UI 自动化树的该视图中。 内容视图中显示的唯一文本是非冗余信息的文本。 这使任何辅助技术能够快速筛选其用户所需的信息片段。

编辑

编辑控件使用户能够查看和编辑单行文本。

注释

在某些布局方案中,单个文本行可能会换行。

文档

文档控件允许用户从多页文本中导航和获取信息。

TextPattern 客户端 API

类型 DESCRIPTION
System.Windows.Automation.TextPattern Microsoft UI 自动化文本模型的入口点。

此类还包含两个 TextPattern 事件侦听器: TextSelectionChangedEventTextChangedEvent
System.Windows.Automation.Text.TextPatternRange 支持 TextPattern 的文本容器内文本范围的表示。

UI 自动化客户端应注意使用 TextPatternRange 创建的文本范围的当前有效性。 如果文本控件中的原始文本完全替换为新文本,则当前文本范围将变为无效。 但是,如果仅更改了原始文本的一部分,并且基础文本控件正使用定位点(或终结点)管理其文本“指针”,而不是绝对字符定位,则文本范围可能仍具有一些可行性。

客户端可以侦听 TextChangedEvent ,获取任何他们正在处理的文本内容的更改通知。
System.Windows.Automation.AutomationTextAttribute 用于标识文本范围的格式设置属性。

TextPattern 提供程序 API

在本机或通过 Microsoft UI 自动化代理的方式实现 TextPatternITextProvider 接口来支持 ITextRangeProvider 的 UI 元素或控件,除了提供强大的导航功能之外,还能够公开它们包含的任何文本的详细的特性信息。

如果控件缺少对任何特定属性的支持,则 TextPattern 提供程序不必支持所有文本属性。

如果控件支持在文本区域(或系统插入标记)内的文本选择或位置,则 TextPattern 提供程序必须支持 GetSelectionSelect 函数。 如果控件不支持此功能,则它不需要支持上述任一方法。 但是,控件必须通过实现 SupportedTextSelection 属性来公开它支持的文本选择的类型。

提供程序 TextPattern 必须始终支持 TextUnit 常量 Character 和常量 Document ,以及任何其他它能够支持的 TextUnit 常量。

注释

供应商可以选择不支持特定的TextUnit,而是支持下一个最大TextUnit,顺序如下:CharacterFormatWordLineParagraphPageDocument

API(应用程序编程接口) DESCRIPTION
ITextProvider 接口 公开客户端应用程序中支持 TextPattern 的方法、属性和特性(请参阅 ITextProvider)。
ITextRangeProvider 接口 表示文本提供程序中的一段文本(请参阅 ITextRangeProvider)。
System.Windows.Automation.TextPatternIdentifiers 包含用于标识文本提供程序的值(请参阅 TextPatternIdentifiers)。

安全

UI 自动化体系结构的设计考虑到了安全性(请参阅 UI 自动化安全概述)。 但是,此概述中所述的 TextPattern 类需要一些特定的安全注意事项。

  • Microsoft UI 自动化文本提供程序提供只读接口,并且不提供更改控件中现有文本的功能。

  • 只有在客户完全“受信任”的情况下,UI 自动化客户端才能使用 Microsoft UI 自动化。 例如,受保护的登录桌面,只有已知且受信任的应用程序才能运行。

  • UI 自动化提供程序的开发人员应注意,他们选择通过Microsoft UI 自动化在其控件中公开的所有信息本质上是公开的,并且可由其他代码完全访问。 Microsoft UI 自动化不会努力确定任何 UI 自动化客户端的可信度,因此 UI 自动化提供程序不应公开受保护的内容或敏感的文本信息(如密码字段)。

  • Windows Vista 安全性中最重要的更改之一被广泛称为“安全输入”,其中包括最低特权(或受限)用户帐户(LUA)和 UI 特权级别隔离(UIPI)等技术。

    • UIPI 阻止一个程序控制和/或监视另一个更“特权”的程序,防止跨进程窗口消息攻击欺骗用户输入。

    • LUA 设置管理员组中用户所运行应用程序的特权限制。 应用程序不一定具有管理员权限,而是使用所需的最低权限运行。 因此,LUA 方案中可能强制实施一些限制。 最明显的是字符串截断(包括 TextPattern 字符串),其中可能需要限制从管理员级应用程序获取的字符串长度或大小,以避免因过度分配内存而导致应用程序失去功能。

性能

由于 TextPattern 依赖于对其大部分功能的跨进程调用,因此它不提供缓存机制来提高处理内容时的性能。 这与 Microsoft UI 自动化中的其他控件模式不同,这些控件模式可以通过 GetCachedPatternTryGetCachedPattern 方法进行访问。

改善性能的一种策略是通过确保 UI 自动化客户端使用 GetText尝试检索中等规模的文本块。 例如,GetText(1) 调用将为每个字符产生跨进程命中,而一个 GetText(-1) 调用将产生一个跨进程命中,但可能会有较高的延迟,具体取决于文本提供程序的大小。

TextPattern 术语

属性
文本范围的格式特征(例如, IsItalicAttributeFontNameAttribute)。

退化区间
退化的范围是空或零字符的文本范围。 出于 TextPattern 控件模式的目的,文本插入点(或系统插入标记)被视为退化范围。 如果未选择任何文本,GetSelection将返回文本插入点处的退化范围,RangeFromPoint则将退化范围返回作为其起始点。 RangeFromChildGetVisibleRanges 在文本提供程序找不到与给定条件匹配的任何文本范围时,可能会返回退化的范围。 退化区间可以作为文本提供程序中的起始端点。 FindTextFindAttribute 返回空引用(Nothing 在 Microsoft Visual Basic .NET 中),以避免与已发现范围和退化范围混淆。

嵌入式对象
UI 自动化文本模型中有两种类型的嵌入对象。 它们由基于文本的内容元素(如超链接或表)以及控件元素(如图像和按钮)组成。 有关详细信息,请参阅 使用 UI 自动化访问嵌入式对象

终结点
文本容器内的文本范围的绝对 StartEnd 点。

TextPatternRangeEndpoints(开始和结束)。 下面显示了一组起始点和终结点。

TextRange
表示包括所有的相关特性和功能的文本容器中带起始点和终结点的一段文本。

TextUnit
用于浏览文本范围的逻辑段的文本(字符、单词、行或段落)的预定义单位。

另请参阅