UI 자동화 TextPattern 개요

참고 항목

이 설명서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI 자동화 클래스를 사용하려는 .NET Framework 개발자를 위한 것입니다. UI 자동화에 대한 최신 정보는 Windows 자동화 API: UI 자동화를 참조하세요.

이 개요에서는 Microsoft UI 자동화를 사용하여 UI 자동화에서 지원되는 플랫폼에 있는 텍스트 컨트롤의 텍스트 내용(형식 및 스타일 특성 포함)를 노출하는 방법을 설명합니다. 이러한 컨트롤에는 Microsoft .NET Framework TextBoxRichTextBox와 해당 Win32 값이 포함되지만, 이에 제한되지는 않습니다.

컨트롤의 텍스트 콘텐츠 노출은 텍스트 컨테이너의 내용을 텍스트 스트림으로 나타내는 TextPattern 컨트롤 패턴을 사용하여 수행됩니다. 다시, TextPattern 을 사용하려면 형식 및 스타일 특성을 노출하는 TextPatternRange 클래스를 지원해야 합니다. TextPatternRangeStartEnd 엔드포인트 컬렉션을 사용하여 텍스트 컨테이너의 연속 텍스트 범위나 여러 비연속 텍스트 범위를 나타내 TextPattern을 지원합니다. TextPatternRange 는 선택, 비교, 검색 및 탐색 등의 기능을 지원합니다.

참고 항목

TextPattern 클래스는 텍스트를 삽입하거나 수정할 수 있는 방법을 제공하지 않습니다. 그러나 컨트롤에 따라 UI 자동화 ValuePattern 또는 직접 키보드 입력을 통해 이 작업을 수행할 수 있습니다. 예제는 TextPattern Insert Text Sample 을 참조하세요.

이 개요에 설명된 기능은 보조 기술 공급업체 및 최종 사용자에게 중요합니다. 보조 기술은 UI 자동화를 사용하여 사용자에 대한 전체 텍스트 형식 정보를 수집하고 TextUnit(문자, 단어, 줄 또는 단락)별로 텍스트의 프로그래밍 방식 탐색 및 선택 기능을 제공합니다.

UI 자동화 TextPattern과 텍스트 서비스 프레임워크 비교

TSF(Text Services Framework)는 데스크톱 및 애플리케이션 내에서 자연 언어 서비스 및 고급 텍스트 입력을 사용할 수 있게 해주는 간단하고 확장 가능한 시스템 프레임워크입니다. 애플리케이션에서 해당 텍스트 저장소를 노출하는 인터페이스를 제공할 뿐 아니라 해당 텍스트 저장소에 대한 메타데이터를 지원합니다.

그러나 TSF는 컨텍스트 인식 시나리오에 입력을 삽입해야 하는 애플리케이션용으로 설계된 반면, TextPattern은 화면 읽기 프로그램 및 브라유 점자 디바이스용 텍스트 스토리지에 최적화된 액세스를 제공하기 위한 읽기 전용 솔루션(위에서 언급한 제한된 해결 방법 사용)입니다.

간단히 말해, 텍스트 저장소에 대한 읽기 전용 액세스가 필요한 액세스 가능 기술은 TextPattern을 사용할 수 있지만 컨텍스트 인식 입력의 경우 TSF의 더 복잡한 기능이 필요합니다.

컨트롤 형식

Text

텍스트 컨트롤은 화면에 텍스트 부분을 나타내는 기본 요소입니다.

독립 실행형 텍스트 컨트롤을 폼의 레이블 또는 정적 텍스트로 사용할 수 있습니다. 텍스트 컨트롤을 ListItem, TreeItem 또는 DataItem의 구조 내에 포함할 수도 있습니다.

참고 항목

UI 자동화 트리의 콘텐츠 뷰에는 텍스트 컨트롤이 나타나지 않을 수도 있습니다(UI 자동화 트리 개요 참조). 이는 텍스트 컨트롤이 대개 다른 컨트롤의 Name 속성을 통해 표시되기 때문입니다. 예를 들어 편집 컨트롤의 레이블을 지정하는 데 사용되는 텍스트는 편집 컨트롤의 Name 속성을 통해 노출됩니다. 편집 컨트롤이 UI 자동화 트리의 콘텐츠 뷰에 있기 때문에 텍스트 요소 자체가 UI 자동화 트리의 해당 뷰에 있을 필요는 없습니다. 콘텐츠 뷰에 표시되는 텍스트는 중복 정보가 아닌 텍스트뿐입니다. 이렇게 하면 보조 기술이 사용자에게 필요한 정보 부분만 신속하게 필터링할 수 있습니다.

편집

편집 컨트롤을 통해 사용자는 텍스트 한 줄을 보고 편집할 수 있습니다.

참고 항목

특정 레이아웃 시나리오에서는 텍스트 한 줄이 줄 바꿈될 수도 있습니다.

문서

문서 컨트롤을 통해 사용자는 여러 텍스트 페이지를 탐색하고 정보를 가져올 수 있습니다.

TextPattern 클라이언트 API

Type 설명
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 자동화 프록시를 통해 ITextProviderITextRangeProvider 인터페이스를 구현하여 TextPattern을 지원하는 UI 요소나 컨트롤은 강력한 탐색 기능을 제공하는 것 외에도 포함된 텍스트에 대한 자세한 특성 정보를 노출할 수 있습니다.

컨트롤이 특정 특성을 지원하지 않는 경우에는 TextPattern 공급자가 일부 텍스트 특성을 지원하지 않아도 됩니다.

컨트롤이 텍스트 영역 내에서 텍스트 선택이나 텍스트 커서(또는 시스템 캐럿) 배치를 지원하는 경우 TextPattern 공급자가 GetSelectionSelect 함수를 지원해야 합니다. 컨트롤이 이 기능을 지원하지 않는 경우에는 이러한 메서드 중 하나를 지원하지 않아도 됩니다. 그러나 컨트롤은 SupportedTextSelection 속성을 구현하여 지원하는 텍스트 선택 유형을 노출해야 합니다.

TextPattern 공급자는 항상 TextUnit 상수인 CharacterDocument 뿐 아니라 지원할 수 있는 다른 TextUnit 상수를 지원해야 합니다.

참고 항목

공급자는 TextUnit , TextUnit , Character, Format, Word, LineParagraph순서로 지원되는 다음 가장 큰 Page로 지연하여 특정 Document에 대한 지원을 건너뛸 수 있습니다.

API 설명
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(최소 권한 (또는 제한됨) 사용자 계정) 및 UIPI(UI 권한 수준 격리)와 같은 기술을 포함합니다.

    • UIPI는 프로그램이 보다 "권한 있는” 다른 프로그램을 제어 및/또는 모니터링할 수 없도록 차단하여 사용자 입력을 스푸핑하는 크로스 프로세스 창 메시지 공격을 방지합니다.

    • LUA는 Administrators 그룹의 사용자가 실행하는 애플리케이션의 권한에 제한을 설정합니다. 애플리케이션에 관리자 권한이 반드시 필요한 것은 아니며 필요한 최소 권한으로 실행됩니다. 결과적으로 LUA 시나리오에서는 몇 가지 제한 사항이 적용될 수 있습니다. 가장 주목할 만한 사항은 문자열 잘림(TextPattern 문자열 포함)입니다. 이 경우 애플리케이션을 사용할 수 없게 되는 지점까지 강제로 메모리를 할당하지 않아도 되도록 관리자 수준 애플리케이션에서 검색되는 문자열의 크기를 제한해야 할 수도 있습니다.

성능

TextPattern은 대부분의 기능에 크로스 프로세스 호출을 사용하므로 콘텐츠를 처리할 때 성능을 향상시키기 위한 캐싱 메커니즘을 제공하지 않습니다. 이는 GetCachedPattern 또는 TryGetCachedPattern 메서드를 사용하여 액세스할 수 있는 Microsoft UI의 다른 컨트롤 패턴과는 다릅니다.

성능 향상을 위한 한 가지 방법은 GetText를 사용하여 UI 자동화 클라이언트가 적절한 크기의 텍스트 블록을 검색하도록 하는 것입니다. 예를 들어 GetText(1) 호출은 각 문자에 대한 크로스 프로세스 적중을 발생시키고 반면 GetText(-1) 호출은 하나의 크로스 프로세스 적중을 발생시키지만 텍스트 공급자 크기에 따라 대기 시간이 높을 수 있습니다.

TextPattern 용어

Attribute
텍스트 범위의 형식 특성(예: IsItalicAttribute 또는 FontNameAttribute)입니다.

중복 제거 범위
중복 제거 범위는 비어 있거나 0자 텍스트 범위입니다. TextPattern 컨트롤 패턴의 목적을 위해 텍스트 삽입 지점(또는 시스템 캐럿)은 중복 제거 범위로 간주됩니다. 선택한 텍스트가 없는 경우 GetSelection은 중복 제거 범위를 텍스트 삽입 지점에 반환하고 RangeFromPoint는 중복 제거 범위를 시작 엔드포인트로 반환합니다. 텍스트 공급자가 지정된 조건과 일치하는 텍스트 범위를 찾을 수 없는 경우RangeFromChildGetVisibleRanges 에서 중복 제거 범위를 반환할 수도 있습니다. 이 중복 제거 범위는 텍스트 공급자 내에서 시작 엔드포인트로 사용될 수 있습니다. FindTextFindAttribute는 null 참조(Microsoft Visual Basic .NET에서는 Nothing)를 반환하여 검색된 범위와 중복 제거 범위가 혼동되지 않도록 합니다.

포함 개체
UI 자동화 텍스트 모델에는 두 가지 유형의 포함 개체가 있습니다. 하이퍼링크 또는 테이블과 같은 텍스트 기반 콘텐츠 요소와 이미지 및 단추와 같은 컨트롤 요소로 구성됩니다. 자세한 내용은 Access Embedded Objects Using UI Automation를 참조하세요.

엔드포인트
텍스트 컨테이너 내에서 텍스트 범위의 절대 Start 또는 End 지점입니다.

TextPatternRangeEndpoints(시작 및 끝) 다음은 시작점과 끝점 집합을 보여 줍니다.

TextRange
연결된 모든 특성 및 기능을 포함하여 시작점과 끝점을 사용한 텍스트 컨테이너 내의 텍스트 범위에 대한 표현입니다.

TextUnit
텍스트 범위의 논리적 세그먼트를 탐색하는 데 사용되는 미리 정의된 텍스트 단위(문자, 단어, 줄 또는 단락)입니다.

참고 항목