Share via


UI 자동화 TextPattern 개요

업데이트: 2007년 11월

이 개요에서는 Microsoft UI 자동화를 사용하여 UI 자동화 지원 플랫폼에서 텍스트 컨트롤의 텍스트 콘텐츠를 해당 서식 및 스타일 특성과 함께 노출하는 방법을 설명합니다. 이러한 컨트롤에는 Microsoft .NET FrameworkTextBox, RichTextBox 및 해당 Win32 컨트롤이 포함됩니다.

컨트롤의 텍스트 콘텐츠를 노출하는 데는 텍스트 컨테이너의 콘텐츠를 텍스트 스트림으로 나타내는 TextPattern컨트롤 패턴이 사용됩니다. TextPattern에서 서식 및 스타일 특성을 노출하려면 TextPatternRange 클래스를 지원해야 합니다. TextPatternRangeStartEnd 끝점 컬렉션을 사용하여 텍스트 컨테이너에 연속적인 텍스트 범위나 여러 개의 연결되지 않은 텍스트 범위를 나타냄으로써 TextPattern을 지원합니다. TextPatternRange는 선택, 비교, 검색, 이동 등의 기능을 지원합니다.

참고:

TextPattern 클래스는 텍스트를 삽입하거나 수정할 수 있는 방법은 제공하지 않습니다. 하지만 컨트롤에 따라 UI 자동화ValuePattern을 사용하거나 직접적인 키 입력을 통해 이러한 작업을 수행할 수 있는 경우도 있습니다. 예제를 보려면 ValuePattern 삽입 텍스트 샘플을 참조하십시오.

이 개요에서 설명하는 기능은 보조 기술 공급업체 및 해당 최종 사용자에게 매우 중요합니다. 보조 기술 공급업체의 경우 UI 자동화를 사용하여 전체 텍스트 서식 정보를 수집하여 사용자에게 표시하고 텍스트를 프로그래밍 방식으로 TextUnit(문자, 단어, 줄 또는 단락) 단위로 탐색 및 선택하는 기능을 제공할 수 있습니다.

이 항목에는 다음 단원이 포함되어 있습니다.

  • UI 자동화 TextPattern과 Text Services Framework 비교
  • 컨트롤 형식
  • TextPattern 클라이언트 API
  • TextPattern 공급자 API
  • 보안
  • 성능
  • TextPattern 용어
  • 관련 항목

UI 자동화 TextPattern과 Text Services Framework 비교

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

하지만 TSF는 컨텍스트 인식 환경에 입력 작업이 필요한 응용 프로그램에 맞게 디자인된 반면 TextPattern은 화면 판독기 및 브라유 점자 장치에 맞게 최적화된 텍스트 저장소 액세스 방법을 제공하기 위해 개발된 읽기 전용 솔루션으로 위에서 언급한 기능 중 제한된 기능만 제공합니다.

다시 말해, 텍스트 저장소에 대한 읽기 전용 액세스가 필요한 내게 필요한 옵션 기술 공급업체의 경우 TextPattern을 사용할 수는 있지만 컨텍스트 인식 입력을 위해서는 TSF의 보다 복잡한 기능을 사용해야 합니다.

컨트롤 형식

Text

Text 컨트롤은 화면의 텍스트 조각을 나타내는 기본 요소입니다.

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

참고:

Text 컨트롤이 UI 자동화 트리의 콘텐츠 뷰에 나타나지 않는 경우도 있습니다(UI 자동화 트리 개요 참조). 이는 Text 컨트롤이 종종 다른 컨트롤의 Name 속성을 통해 표시되기 때문입니다. 예를 들어 Edit 컨트롤의 레이블로 사용되는 텍스트는 Edit 컨트롤의 Name 속성을 통해 노출됩니다. Edit 컨트롤은 UI 자동화 트리의 콘텐츠 뷰에 있으므로 텍스트 요소 자체가 이 UI 자동화 트리 뷰에 있지 않아도 됩니다. 정보가 중복되지 않는 텍스트만 콘텐츠 뷰에 표시되므로 보조 기술을 통해 사용자에게 필요한 정보만 빠르게 필터링할 수 있습니다.

Edit

Edit 컨트롤을 사용하면 사용자가 한 줄 텍스트를 보고 편집할 수 있습니다.

참고:

한 줄 텍스트는 특정 레이아웃 환경에서 줄 바꿈되는 경우도 있습니다.

Document

Document 컨트롤을 사용하면 사용자가 여러 텍스트 페이지에서 정보를 탐색하여 가져올 수 있습니다.

TextPattern 클라이언트 API

System.Windows.Automation.TextPattern Class

Microsoft UI 자동화 텍스트 모델에 대한 진입점입니다.

이 클래스에는 TextSelectionChangedEventTextChangedEvent라는 두 개의 TextPattern 이벤트 수신기도 있습니다.

System.Windows.Automation.Text.TextPatternRange Class

TextPattern을 지원하는 텍스트 컨테이너 내 텍스트 범위에 대한 표현입니다.

UI 자동화 클라이언트에서는 TextPatternRange를 사용하여 만든 텍스트 범위가 현재 유효한지 여부를 확인해야 합니다. 텍스트 컨트롤의 원래 텍스트가 새 텍스트로 완전히 대체되는 경우 현재 텍스트 범위가 유효하지 않게 됩니다. 하지만 원래 텍스트의 일부만 변경되었고 기본 텍스트 컨트롤이 절대 문자 위치 지정이 아닌 앵커(또는 끝점)를 사용하여 해당 텍스트 "포인터"를 관리하는 경우에는 텍스트 범위가 계속 표시될 수 있습니다.

클라이언트는 TextChangedEvent를 수신하여 작업 중인 텍스트 콘텐츠의 변경에 대한 알림을 받을 수 있습니다.

System.Windows.Automation.AutomationTextAttribute Class

텍스트 범위의 서식 특성을 식별하는 데 사용합니다.

TextPattern 공급자 API

기본적으로 또는 Microsoft UI 자동화 프록시를 통해 ITextProviderITextRangeProvider 인터페이스를 구현하여 TextPattern을 지원하는 UI 요소나 컨트롤은 요소나 컨트롤에 포함된 모든 텍스트의 자세한 특성 정보를 노출할 수 있을 뿐만 아니라 강력한 탐색 기능도 제공할 수 있습니다.

컨트롤이 특정 특성을 지원하지 않는 경우 TextPattern 공급자가 모든 텍스트 특성을 지원할 필요가 없습니다.

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

TextPattern 공급자는 TextUnit 상수인 CharacterDocument 및 지원 가능한 다른 TextUnit 상수를 항상 지원해야 합니다.

참고:

공급자가 특정 TextUnit의 지원을 건너뛰고 다음으로 가장 큰 TextUnit을 지원할 수도 있습니다. 이 경우 공급자는 Character, Format, Word, Line, Paragraph, Page, Document 순서로 지원합니다.

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(최소 권한 사용자 계정 또는 제한된 사용자 계정) 및 UIPI(UI 권한 수준 격리)와 같은 기술을 포함하는 "안전한 입력"이라는 기술입니다.

    • UIPI는 특정 프로그램이 자신보다 "권한이 높은" 프로그램을 제어 또는 모니터링할 수 없게 함으로써 프로세스 전체에서 창 메시지를 통해 사용자 입력을 스푸핑하는 공격을 방지합니다.

    • LUA는 Administrators 그룹의 사용자가 실행하는 응용 프로그램의 권한에 제한을 설정합니다. 관리자 권한이 없어도 응용 프로그램을 실행할 수는 있지만 이때는 필요한 최소 권한으로만 응용 프로그램이 실행됩니다. 따라서 LUA 환경의 경우 몇 가지 제한이 따르게 됩니다. 그 중 가장 눈에 띄는 제한은 TextPattern 문자열 등에 대한 문자열 잘림입니다. 응용 프로그램이 실행되지 않을 정도로 메모리가 할당되는 것을 방지하기 위해 관리자 수준 응용 프로그램에서 검색되는 문자열의 크기를 제한해야 할 수 있습니다.

성능

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

UI 자동화 클라이언트에서 GetText를 사용하여 적절한 크기의 텍스트 블록을 검색하면 성능을 높일 수 있습니다. 예를 들어 GetText(1) 호출은 각 문자에 대해 프로세스 간 적중을 야기하는 반면 한 번의 GetText(-1) 호출은 한 번의 프로세스 간 적중만 야기합니다. 단, GetText(-1) 호출을 사용하는 경우 텍스트 공급자의 크기에 따라 대기 시간이 대폭 늘어날 수 있습니다.

TextPattern 용어

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

  • 디제너레이트 범위
    디제너레이트 범위는 비어 있거나 문자가 0개인 텍스트 범위입니다. TextPattern 컨트롤 패턴의 경우 텍스트 삽입 지점(또는 시스템 캐럿)이 디제너레이트 범위로 간주됩니다. 텍스트가 선택되어 있지 않은 경우 GetSelection은 텍스트 삽입 지점에 디제너레이트 범위를 반환하고 RangeFromPoint는 시작 끝점으로 디제너레이트 범위를 반환합니다. RangeFromChildGetVisibleRanges는 텍스트 공급자가 지정된 조건과 일치하는 텍스트 범위를 찾지 못한 경우 디제너레이트 범위를 반환합니다. 이 디제너레이트 범위는 텍스트 공급자 내에서 시작 끝점으로 사용할 수 있습니다. FindTextFindAttribute는 검색된 범위와 디제너레이트 범위를 구분하기 위해 null 참조(Microsoft Visual Basic .NET의 경우 Nothing)를 반환합니다.

  • 포함 개체
    UI 자동화 텍스트 모델에는 두 가지 형식의 포함 개체가 있습니다. 포함 개체는 하이퍼링크나 표와 같은 텍스트 기반 콘텐츠 요소와 이미지 및 단추와 같은 컨트롤 요소로 구성됩니다. 자세한 내용은 UI 자동화를 사용하여 포함 개체에 액세스를 참조하십시오.

  • 끝점
    텍스트 컨테이너 내 텍스트 범위의 절대 Start 또는 End 지점입니다.  

아래 그림에서는 시작점과 끝점을 보여 줍니다.

TextPatternRangeEndpoints(시작 및 끝)

  • TextRange
    연결된 모든 특성 및 기능을 비롯하여 텍스트 컨테이너 내의 시작점 및 끝점이 있는 텍스트 범위에 대한 표현입니다.

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

참고 항목

작업

UI 자동화의 캐싱 사용

UI 자동화 공급자의 컨트롤 패턴 지원

개념

클라이언트용 UI 자동화 컨트롤 패턴

UI 자동화 컨트롤 패턴 개요

UI 자동화 트리 개요

UI 자동화 클라이언트에 대한 컨트롤 패턴 매핑

기타 리소스

Text Services Framework