UI 自動化 TextPattern 概觀
![]() |
---|
這份文件適用於想要使用 System.Windows.Automation 命名空間中定義之 Managed UI Automation 類別的 .NET Framework 開發人員。如需 UI Automation 的最新資訊,請參閱 Windows Automation API:使用者介面自動化 (英文)。 |
本概觀說明如何使用 Microsoft UI Automation,以公開 UI Automation支援平台中文字控制項的文字內容,包括格式和樣式屬性。 這些控制項包括 (但不限於) Microsoft .NET Framework TextBox 和 RichTextBox,以及它們的 Win32 對應項。
公開控制項的文字內容是透過使用 TextPattern 控制項模式完成的,它會將文字容器 (Container) 的內容表示為文字資料流。 TextPattern 則需要 TextPatternRange 類別的支援,才能公開格式和樣式屬性。 TextPatternRange 會使用 Start 和 End 端點集合,在文字容器中表示連續或多個斷續的文字範圍,藉以支援 TextPattern。 TextPatternRange 支援諸如選取、比較、擷取和周遊之類的功能。
![]() |
---|
TextPattern 類別沒有提供插入或修改文字的方式。不過,根據控制項而定,這項動作可以透過 UI Automation ValuePattern 或透過直接鍵盤輸入來完成。如需範例,請參閱 ValuePattern Insert Text Sample。 |
本概觀中所說明的功能對於輔助技術廠商及其使用者來說極為重要。 輔助技術可以使用 UI Automation,為使用者收集完整的文字格式資訊,並根據 TextUnit (字元、單字、行或段落) 提供程式設計巡覽和文字選取。
這個主題包含下列章節。
- 比較使用者介面自動化 TextPattern 與Text Services Framework
- 控制項型別
- TextPattern 用戶端 API
- TextPattern 提供者 API
- 安全性
- 效能
- TextPattern 用語
- 相關主題
比較使用者介面自動化 TextPattern 與Text Services Framework
Text Services Framework (TSF) 是在桌面和應用程式中啟用自然語言服務和進階文字輸入的簡單、可擴充系統架構。 除了提供介面供應用程式公開其文字存放區之外,它還會支援該文字存放區的中繼資料。
不過,TSF 是專為需要將輸入插入內容感知案例中的應用程式而設計的,TextPattern 則是專為螢幕助讀員和點字裝置文字存放區提供最佳存取的唯讀方案 (具上述的有限解決方法)。
總之,需要唯讀存取文字存放區的協助工具技術可以使用 TextPattern,但需要更複雜的 TSF 功能,才能進行內容感知輸入。
控制項型別
Text
Text 控制項是表示螢幕上文字項目的基本項目。
獨立的文字控制項可以做為表單上的標籤或靜態文字使用。 文字控制項也可以包含在 ListItem、TreeItem 或 DataItem 的結構中。
![]() |
---|
文字控制項可能不會出現在 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 Proxy) 而支援 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 Automation架構在設計時有考慮到安全性 (請參閱 UI 自動化安全性概觀)。 不過,本概觀中說明的 TextPattern 類別需要一些特定的安全性考量。
Microsoft UI Automation文字提供者會提供唯讀介面,而且不會提供變更控制項中現有文字的能力。
只有在 UI 自動化用戶端是完全「受信任」時,才能使用 Microsoft UI Automation。 其中一個範例就是受保護的登入桌面,只有已知、受信任的應用程式才能在此執行。
使用者介面自動化提供者的開發人員應該知道,他們透過 Microsoft UI Automation選擇在控制項中公開的所有資訊,基本上都是其他程式碼可以完整存取的公開資訊。 Microsoft UI Automation不會判斷任何使用者介面自動化用戶端是否可信任,因此使用者介面自動化提供者不應公開受保護的內容或機密的文字資訊 (例如密碼欄位)。
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 會傳回 null 參考 (在 Microsoft Visual Basic .NET 中為 Nothing),以避免已探索之範圍和變質範圍之間的混淆。內嵌物件
UI Automation文字模型中有兩種內嵌物件類型, 包含文字基礎的內容項目 (例如超連結或表格) 和控制項項目 (例如影像和按鈕)。 如需詳細資訊,請參閱UI 自動化存取內嵌物件。
下列顯示一組起始點和結束點。
TextRange
文字容器中具有起始點和結束點的文字範圍表示法,包括所有相關屬性和功能。TextUnit
用於巡覽文字範圍邏輯區段的預先定義文字單位 (字元、單字、行或段落)。