UI 自动化 TextPattern 概述

备注

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

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

控件文本内容的功能通过使用 TextPattern 控件模式完成,该控件模式表示作为文本流的文本容器的内容。 与之相反, TextPattern 需要 TextPatternRange 的支持,以公开格式和样式特性。 TextPatternRange 通过采用一系列 TextPatternStart 终结点表示文本容器中连续或多个不连续的的文本段来支持 EndTextPatternRange 支持功能包括选择、比较、检索和遍历。

备注

TextPattern 类不提供插入或修改文本的方法。 但是,这可能是由 UI 自动化 ValuePattern 或通过直接键盘输入来完成的。 有关示例,请参见 TextPattern Insert Text Sample

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

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

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

不过,TSF 是针对需要将输入注入到上下文感知方案中的应用程序而设计的,而 TextPattern 这是一个只读的解决方案, (前面提到的有限解决方法) 旨在提供对屏幕阅读器和盲文设备的文本存储的优化访问。

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

控件类型

文本

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

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

备注

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

编辑

编辑控件使用户可以查看和编辑单个文本行。

备注

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

文档

文档控件能让用户导航并从多个页面的文本上获取的信息。

TextPattern 客户端 Api

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

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

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

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

TextPattern 提供程序 Api

TextPattern ITextProvider ITextRangeProvider 除了提供强大的导航功能之外,通过实现和接口(本机或通过 Microsoft UI 自动化代理)实现的 UI 元素或控件可以公开其包含的任何文本的详细特性信息。

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

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

一个 TextPattern 提供程序必须始终支持 TextUnit 常量 CharacterDocument 及其支持的任何其他 TextUnit 常量。

备注

提供程序可以跳过某一特定 TextUnit 的支持,只需通过按如下顺序延迟到下一个受支持的最大 TextUnitCharacterFormatWordLineParagraphPageDocument

ITextProvider Interface 公开在客户端应用程序中支持 TextPattern 的方法、属性和特性(请参阅 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 Automation 中的控件模式 GetCachedPattern 不同 TryGetCachedPattern

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

TextPattern 术语

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

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

嵌入对象
UI 自动化文本模型中有两种类型的嵌入对象。 它们包含基于文本的内容元素,如超链接或表,以及控制元素(如图像和按钮)。 有关详细信息,请参见 Access Embedded Objects Using UI Automation

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

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

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

TextUnit
用于导航文本范围的逻辑分段的预定义文本单元(字符、单词、行或段落)。

另请参阅