비고
이 설명서는 System.Windows.Automation 네임스페이스에 정의된 관리되는 UI 자동화 클래스를 사용하려는 .NET Framework 개발자를 위한 것입니다. UI 자동화에 대한 최신 정보는 Windows Automation API: UI 자동화참조하세요.
이 개요에서는 Microsoft UI 자동화를 사용하여 UI 자동화 지원 플랫폼에서 텍스트 컨트롤의 형식 및 스타일 특성을 비롯한 텍스트 콘텐츠를 노출하는 방법을 설명합니다. 이러한 컨트롤에는 Microsoft .NET Framework TextBox 및 RichTextBox Win32 등가 항목이 포함되지만 이에 국한되지는 않습니다.
컨트롤의 텍스트 콘텐츠 노출은 텍스트 컨테이너의 TextPattern 내용을 텍스트 스트림으로 나타내는 컨트롤 패턴을 사용하여 수행됩니다. 따라서 TextPattern 형식 및 스타일 특성을 노출하려면 클래스의 TextPatternRange 지원이 필요합니다. TextPatternRange는 TextPattern를 지원하며, 텍스트 컨테이너에서 연속적 또는 여러 개로 분리된 텍스트 범위를 Start 및 End 엔드포인트의 모음으로 표현합니다. TextPatternRange 는 선택, 비교, 검색 및 순회와 같은 기능을 지원합니다.
비고
클래스는 TextPattern 텍스트를 삽입하거나 수정하는 방법을 제공하지 않습니다. 그러나 컨트롤에 따라 UI 자동화 ValuePattern 또는 직접 키보드 입력을 통해 이 작업을 수행할 수 있습니다. 예제는 TextPattern 텍스트 삽입 샘플을 참조하세요.
이 개요에 설명된 기능은 보조 기술 공급업체 및 최종 사용자에게 매우 중요합니다. 보조 기술은 UI 자동화를 사용하여 사용자에 대한 전체 텍스트 서식 정보를 수집하고 프로그래밍 방식 탐색 및 텍스트 TextUnit 선택(문자, 단어, 줄 또는 단락)을 제공할 수 있습니다.
UI 자동화 TextPattern 및 Text Services 프레임워크
TSF(Text Services Framework)는 데스크톱 및 애플리케이션 내에서 자연어 서비스 및 고급 텍스트 입력을 가능하게 하는 간단하고 확장 가능한 시스템 프레임워크입니다. 애플리케이션이 텍스트 저장소를 노출할 수 있는 인터페이스를 제공하는 것 외에도 해당 텍스트 저장소에 대한 메타데이터도 지원합니다.
그러나 TSF는 컨텍스트 인식 시나리오 TextPattern 에 입력을 삽입해야 하는 애플리케이션용으로 설계되었지만, 읽기 전용 솔루션(위에서 설명한 제한된 해결 방법 포함)은 화면 읽기 프로그램 및 점자 디바이스용 텍스트 저장소에 최적화된 액세스를 제공하기 위한 것입니다.
즉, 텍스트 저장소에 대한 읽기 전용 액세스가 필요한 액세스 가능한 기술을 사용할 TextPattern수 있지만 컨텍스트 인식 입력을 위해 TSF의 더 복잡한 기능이 필요합니다.
컨트롤 형식
문자 메시지
텍스트 컨트롤은 화면의 텍스트 부분을 나타내는 기본 요소입니다.
독립 실행형 텍스트 컨트롤은 폼에서 레이블 또는 정적 텍스트로 사용할 수 있습니다. 텍스트 컨트롤은 ListItem, TreeItem 또는 DataItem의 구조 내에 포함될 수도 있습니다.
비고
텍스트 컨트롤은 UI 자동화 트리의 콘텐츠 보기에 표시되지 않을 수 있습니다( UI 자동화 트리 개요 참조). 텍스트 컨트롤이 다른 컨트롤의 Name 속성을 통해 표시되는 경우가 많기 때문입니다. 예를 들어 편집 컨트롤에 레이블을 지정하는 데 사용되는 텍스트는 편집 컨트롤의 Name 속성을 통해 노출됩니다. 편집 컨트롤은 UI 자동화 트리의 콘텐츠 보기에 있으므로 텍스트 요소 자체가 UI 자동화 트리의 해당 보기에 있을 필요는 없습니다. 콘텐츠 보기에 표시되는 유일한 텍스트는 중복 정보가 아닌 텍스트입니다. 이를 통해 보조 기술은 사용자가 필요로 하는 정보만 빠르게 필터링할 수 있습니다.
편집
편집 컨트롤을 사용하면 사용자가 한 줄의 텍스트를 보고 편집할 수 있습니다.
비고
텍스트 한 줄은 특정 레이아웃 시나리오에서 래핑할 수 있습니다.
문서
문서 컨트롤을 사용하면 사용자가 여러 텍스트 페이지에서 정보를 탐색하고 가져올 수 있습니다.
TextPattern 클라이언트 API
유형 | 설명 |
---|---|
System.Windows.Automation.TextPattern 클래스 |
Microsoft UI 자동화 텍스트 모델의 진입점입니다. 이 클래스에는 두 개의 TextPattern 이벤트 수신기 TextSelectionChangedEvent 및 TextChangedEvent가 있습니다. |
System.Windows.Automation.Text.TextPatternRange 클래스 |
를 지원하는 텍스트 컨테이너 내의 텍스트 범위 표현입니다.TextPattern UI 자동화 클라이언트는 을 사용하여 TextPatternRange만든 텍스트 범위의 현재 유효성에 주의해야 합니다. 텍스트 컨트롤의 원본 텍스트가 완전히 새 텍스트로 바뀐 경우 현재 텍스트 범위는 유효하지 않습니다. 그러나 원본 텍스트의 일부만 변경되고 기본 텍스트 컨트롤이 절대 문자 위치를 지정하지 않고 앵커(또는 엔드포인트)를 사용하여 텍스트 "포인터"를 관리하는 경우 텍스트 범위는 여전히 어느 정도의 실행 가능성을 가질 수 있습니다. 클라이언트는 작업 중인 텍스트 콘텐츠의 변경 내용에 대한 TextChangedEvent 알림을 수신 대기할 수 있습니다. |
System.Windows.Automation.AutomationTextAttribute 클래스 |
텍스트 범위의 서식 특성을 식별하는 데 사용됩니다. |
TextPattern 공급자 API
TextPattern UI 요소 또는 컨트롤은 ITextProvider와 ITextRangeProvider 인터페이스를 기본적으로 구현하거나 Microsoft UI 자동화 프록시를 통해 구현하여 강력한 탐색 기능을 제공할 뿐만 아니라 포함된 텍스트에 대한 자세한 특성 정보를 제공할 수 있습니다.
TextPattern 컨트롤에 특정 특성에 대한 지원이 없는 경우 공급자가 모든 텍스트 특성을 지원할 필요는 없습니다.
TextPattern 공급자는 컨트롤이 GetSelectionSelect 텍스트 영역 내에서 텍스트 커서(또는 시스템 캐럿)의 텍스트 선택 또는 배치를 지원하는 경우, 해당 함수를 지원해야 합니다. 컨트롤이 이 기능을 지원하지 않는 경우 이러한 메서드 중 하나를 지원할 필요가 없습니다. 그러나 컨트롤은 속성을 구현하여 SupportedTextSelection 지원하는 텍스트 선택 유형을 노출해야 합니다.
공급자는 항상 TextPattern 상수 TextUnit 및 Character와 그 외 지원할 수 있는 다른 Document 상수를 지원해야 합니다.
비고
공급자는 다음 순서 TextUnit, TextUnit, Character, Format, Word, Line, 그리고 Paragraph로 지원되는 더 큰 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(사용자 계정) 및 UI UIPI(권한 수준 격리)와 같은 기술을 포함하는 "보안 입력"이라고 합니다.
UIPI는 한 프로그램이 다른 "권한 있는" 프로그램을 제어 및/또는 모니터링하지 못하게 하여 사용자 입력을 스푸핑하는 프로세스 간 창 메시지 공격을 방지합니다.
LUA는 Administrators 그룹의 사용자가 실행하는 애플리케이션의 권한에 대한 제한을 설정합니다. 애플리케이션에 반드시 관리자 권한이 있는 것은 아니지만 필요한 최소 권한으로 실행됩니다. 결과적으로 LUA 시나리오에 몇 가지 제한 사항이 적용될 수 있습니다. 특히 문자열 잘림(TextPattern 문자열 포함)은 관리자 수준 애플리케이션에서 검색되는 문자열의 크기를 제한하여, 메모리 할당의 과도한 증가로 인해 애플리케이션이 비활성화되는 상황을 예방해야 할 수 있습니다.
성능
TextPattern은 대부분의 기능에 대해 크로스 프로세스 호출을 사용하므로 콘텐츠를 처리할 때 성능을 향상시키는 캐싱 메커니즘을 제공하지 않습니다. 이는 Microsoft UI 자동화의 다른 컨트롤 패턴과는 달리 GetCachedPattern 또는 TryGetCachedPattern 메서드를 사용하여 액세스할 수 있습니다.
성능을 향상시키기 위한 한 가지 방법은 UI 자동화 클라이언트가 적당히 크기가 큰 텍스트 블록을 사용하여 GetText검색하도록 하는 것입니다. 예를 들어 GetText(1) 호출은 각 문자에 대해 교차 프로세스 적중을 발생시키는 반면, 하나의 GetText(-1) 호출은 하나의 프로세스 간 적중을 발생하지만 텍스트 공급자의 크기에 따라 대기 시간이 높을 수 있습니다.
TextPattern 용어
속성
텍스트 범위의 서식 특성(예: IsItalicAttribute 또는 FontNameAttribute)입니다.
퇴화 범위
퇴행성 범위는 빈 텍스트 범위 또는 0자 텍스트 범위입니다. TextPattern 컨트롤 패턴을 위해 텍스트 삽입 지점(또는 시스템 캐리트)은 퇴행성 범위로 간주됩니다. 선택된 텍스트가 없으면, GetSelection는 텍스트 삽입 지점에서 축소된 범위를 반환하고, RangeFromPoint는 시작점에서 축소된 범위를 반환합니다.
RangeFromChild 텍스트 공급자가 지정된 조건과 GetVisibleRanges 일치하는 텍스트 범위를 찾을 수 없는 경우 퇴행성 범위를 반환할 수 있습니다. 이 퇴행성 범위는 텍스트 공급자 내에서 시작 엔드포인트로 사용할 수 있습니다.
FindText와 FindAttribute는 검색된 범위와 퇴화 범위의 혼동을 방지하기 위해 null 참조(Nothing
Microsoft Visual Basic .NET)를 반환합니다.
임베디드 객체
UI 자동화 텍스트 모델에는 두 가지 유형의 포함된 개체가 있습니다. 하이퍼링크 또는 테이블과 같은 텍스트 기반 콘텐츠 요소와 이미지 및 단추와 같은 컨트롤 요소로 구성됩니다. 자세한 내용은 UI 자동화를 사용하여 포함된 개체 액세스를 참조하세요.
엔드포인트
텍스트 컨테이너 내의 텍스트 범위의 절대 Start 또는 End 지점입니다.
다음은 시작점과 끝점 집합을 보여 줍니다.
TextRange
연결된 모든 특성 및 기능을 포함하는 텍스트 컨테이너에서 시작점과 끝점이 있는 텍스트 범위의 표현입니다.
TextUnit
텍스트 범위의 논리적 세그먼트를 탐색하는 데 사용되는 미리 정의된 텍스트 단위(문자, 단어, 줄 또는 단락)입니다.