共用方式為


UI 自動化文本模式概述

備註

本檔適用於想要使用 System.Windows.Automation 命名空間中定義的受控UI自動化類別的 .NET Framework 開發人員。 如需 UI 自動化的最新資訊,請參閱 Windows 自動化 API:使用者介面自動化

本概觀描述如何使用 Microsoft UI 自動化來公開文字內容,包括 UI 自動化支援平台中文字控件的格式和樣式屬性。 這些控件包括但不限於 Microsoft .NET Framework TextBoxRichTextBox,以及它們的 Win32 對等專案。

公開控件的文字內容是透過使用 TextPattern 控件模式來完成,此模式會將文字容器的內容表示為文字數據流。 接著,TextPattern 需要TextPatternRange類別的支援,以公開格式和樣式屬性。 TextPatternRange 支持 TextPattern,通過在文字容器中表示連續或多個不連續的文字範圍,並使用 StartEnd 作為端點集合。 TextPatternRange 支持選取、比較、擷取和遍歷等功能。

備註

類別 TextPattern 不提供插入或修改文字的方法。 不過,視控件而定,這可能是由UI自動化 ValuePattern 或透過直接鍵盤輸入來完成。 如需範例,請參閱 TextPattern 插入文字範例

本概觀中所述的功能對於輔助技術廠商及其終端用戶至關重要。 輔助技術可以使用UI自動化來收集使用者的完整文字格式資訊,並以程式控制方式提供文字的瀏覽和選取功能 TextUnit(字元、詞、行或段落)。

UI 自動化 TextPattern 與文字服務架構

文字服務架構 (TSF) 是簡單且可調整的系統架構,可在桌面和應用程式內啟用自然語言服務和進階文字輸入。 除了為應用程式提供介面來公開其文字存放區之外,它也支援該文字存放區的元數據。

不過,TSF 是專為需要在上下文感知案例中插入輸入的應用程式而設計,而 TextPattern 則是一種唯讀解決方案(具有限的因應措施,如上所述),旨在優化螢幕助讀程式和盲文裝置對文字存放區的存取。

簡言之,需要對文字存放區進行只讀存取權限的無障礙技術可以使用 TextPattern,但要進行內容感知輸入則需要使用文本服務框架 (TSF) 的更複雜功能。

控制件類型

文字

Text 控制件是代表螢幕上一段文字的基本元素。

獨立文字控制項可用來做為表單上的標籤或靜態文字。 文字控制項也可以包含在ListItemTreeItemDataItem的結構內。

備註

文字控制項可能不會出現在使用者介面自動化樹狀結構的內容檢視中(請參閱 UI 自動化樹狀結構概觀)。 這是因為文字控件通常會透過另一個控制件的 Name 屬性來顯示。 例如,用來標記 Edit 控件的文字會透過 Edit 控件的 Name 屬性公開。 由於 [編輯] 控件位於UI自動化樹狀結構的內容檢視中,因此不需要文字元素本身位於UI自動化樹狀目錄的該檢視中。 顯示在內容檢視中的文字只有不屬於多餘資訊的部分。 這可讓任何輔助技術快速篩選使用者所需的資訊片段。

編輯

編輯控制項可讓用戶檢視和編輯單行文字。

備註

單行文字可能會在特定版面配置下換行。

文件

檔控制可讓使用者從多頁文字巡覽和取得資訊。

TextPattern 用戶端 API

類型 說明
System.Windows.Automation.TextPattern 類別 Microsoft UI 自動化文本模型的入口點。

這個類別也包含兩個事件接聽程式:TextPatternTextSelectionChangedEventTextChangedEvent
System.Windows.Automation.Text.TextPatternRange 類別 支援 TextPattern之文字容器內文字範圍的表示。

使用者介面自動化客戶端應該小心使用 建立 TextPatternRange之文字範圍的目前有效性。 如果文字控制項中的原始文字完全由新文字取代,則目前的文字範圍會變成無效。 不過,如果只有部分原始文字已變更,而且基礎文字控件會使用錨點(或端點)管理其文字“指標”,而不是使用絕對字元定位,則文字範圍可能仍有一些可行性。

用戶端可以接聽 TextChangedEvent ,以取得其所處理之文字內容之任何變更的通知。
System.Windows.Automation.AutomationTextAttribute 類別 用來識別文字範圍的格式化屬性。

TextPattern 提供者 API

原生或透過 Microsoft UI 自動化 Proxy 實作 TextPatternITextProvider 介面的 UI 元素或控件能支援 ITextRangeProvider,除了提供強固的導覽功能之外,還能公開包含之任何文字的詳細屬性資訊。

TextPattern如果控件缺少任何特定屬性的支援,提供者就不需要支援所有文字屬性。

TextPattern如果控件支援文字選取或文字游標(或系統插入號)在文字區域內的位置,提供者必須支援 GetSelectionSelect 函式。 如果控件不支援這項功能,則不需要支援其中一種方法。 不過,控件必須藉由實 SupportedTextSelection 作 屬性來公開它支援的文字選取類型。

TextPattern提供者必須一律支援TextUnit常數CharacterDocument以及它能夠支援的任何其他TextUnit常數。

備註

提供者可以略過特定的TextUnit支援,並改用以下順序所支援的下一個更大TextUnitCharacterFormatWordLineParagraphPageDocument

API(應用程式介面) 說明
ITextProvider 介面 公開用戶端應用程式中支援 TextPattern 的方法、屬性和屬性(請參閱 ITextProvider)。
ITextRangeProvider 介面 代表文字提供者中的文字範圍(請參閱 ITextRangeProvider)。
System.Windows.Automation.TextPatternIdentifiers 類別 包含做為文字提供者識別碼的值(請參閱 TextPatternIdentifiers)。

安全

UI 自動化架構的設計考慮安全性(請參閱 UI 自動化安全性概觀)。 不過,此概觀中所述的 TextPattern 類別需要一些特定的安全性考慮。

  • Microsoft使用者介面自動化文字提供者提供只讀介面,而且不提供變更控件中現有文字的能力。

  • 只有在完全「信任」的情況下,UI 自動化客戶端才能使用 Microsoft UI Automation。 其中一個範例是受保護的登入桌面,其中只有已知且受信任的應用程式可以執行。

  • 使用者介面自動化提供者的開發人員應該注意,他們選擇透過Microsoft UI 自動化在其控件中公開的所有資訊,基本上都是由其他程式代碼公開且完全可存取的。 Microsoft使用者介面自動化不費力地判斷任何使用者介面自動化用戶端的可信度,因此使用者介面自動化提供者不應公開受保護的內容或敏感性文字資訊(例如密碼欄位)。

  • Windows Vista 安全性最重要的變更之一,大致稱為「安全輸入」,其中包含最低許可權(或有限)用戶帳戶(LUA)和 UI 許可權等級隔離(UIPI)等技術。

    • UIPI 可防止一個程式控制及/或監視另一個更「特殊許可權」的程式,防止詐騙使用者輸入的跨進程視窗訊息攻擊。

    • LUA 會設定系統管理員群組中使用者所執行之應用程式的許可權限制。 應用程式不一定具有系統管理員許可權,而是會改為以所需的最低許可權執行。 因此,LUA 情境中可能會強制執行一些限制。 最值得注意的是字串截斷(包括 TextPattern 字串),有時可能需要限制從管理員級別應用程式擷取的字串大小,以避免必須分配過多記憶體而導致應用程式停用。

績效

因為 TextPattern 依賴跨進程呼叫大部分的功能,所以它不提供快取機制來改善處理內容時的效能。 這與Microsoft UI自動化中的其他控件模式不同,這些控件模式可以使用GetCachedPatternTryGetCachedPattern方法來存取。

改善效能的其中一種策略是確保使用者介面自動化客戶端嘗試使用 GetText來擷取中等大小的文字區塊。 例如,GetText(1) 呼叫會產生每個字元的跨進程叫用,而一個 GetText(-1) 呼叫會產生一個跨進程叫用,但可能會有高延遲,視文字提供者的大小而定。

TextPattern 術語

屬性
文字範圍的格式化特性(例如 IsItalicAttributeFontNameAttribute)。

退化範圍
變質範圍是空白或零字元文字範圍。 為了符合 TextPattern 控制模式的目的,文字插入點(或系統插入符號)被視為退化範圍。 如果未選取任何文字, GetSelection 則會在文字插入點傳回變質範圍,並 RangeFromPoint 傳回變質範圍做為其起始端點。 RangeFromChild 當文字提供者找不到符合指定條件的任何文字範圍時,和 GetVisibleRanges 可能會傳回變質範圍。 此變質範圍可以當做文字提供者內的起始端點使用。 FindTextFindAttribute 傳回空引用(在 Microsoft Visual Basic .NET 中為 Nothing),以避免與發現的範圍和退化範圍混淆。

嵌入物件
UI 自動化文字模型中有兩種類型的內嵌物件。 它們包含文字型內容元素,例如超連結或數據表,以及影像和按鈕等控件元素。 如需詳細資訊,請參閱 使用UI自動化存取內嵌物件

端點
文字容器內文字範圍中的絕對 StartEnd 位置。

TextPatternRangeEndpoints(開始和結束)。 下方說明一組起始和結束點。

TextRange
文字容器中具有起點和終點的文字範圍表示法,包括所有相關聯的屬性和功能。

TextUnit
預先定義的文字單位(字元、文字、行或段落)用於巡覽文字範圍的邏輯區段。

另請參閱