프로그래밍 기술/소프트웨어 접근성, UI 자동화

[S/W 접근성] 포커스 트래커 만들기

언제나휴일 2016. 4. 19. 09:20
반응형

2. 5 포커스 트래커 만들기

 

 이번에는 UI 자동화 기술을 사용해서 응용을 제작하는 간단한 예를 소개하겠습니다.

 

 일반적으로 UI 자동화 기술을 익힐 때 제일 먼저 작성하는 응용으로 포커스 트레커가 있습니다. 포커스 트래커란 시스템에 유일한 포커스를 잡은 UI 요소가 바뀔 때마다 이벤트를 발생하여 포커스를 소유한 UI 요소의 정보를 수집하는 응용입니다.

 

 먼저 C# 언어로 콘솔 응용 프로그램을 생성합니다. 그리고 UI 자동화 기술에 필요한 어셈블리를 참조 추가합니다.

 

자동화 기술 참조 추가

[그림 2.1] UI 자동화 기술 참조 추가

 

 UI 자동화 기술에서는 시스템의 포커스가 변경되었을 때 처리하기 위한 이벤트 핸들러를 AutomationFocusChangedEventHadler 형식으로 제공합니다.

 

네임스페이스: System.Windows.Automation

어셈블리: UIAutomationClient.dll

public delgate void AutomationFocusChangedEventHandler(

                  Object sender, AutomationFocusChangedEventArgs e);

 

 AutomationFocusChangedEventHadler 개체를 이용하여 위임할 포커스 처리 이벤트 처리기를 작성합시다. 처리기에서는 포커스를 받은 자동화 요소를 얻어오고 요소의 이름을 출력하기로 할게요.

 

 자동화 요소는 AutomationElement 형식으로 정의하고 있는데 정적 속성으로 포커스를 소유한 요소를 참조할 수 있습니다.

AutomationElement ae = AutomationElement.FocusedElement;

 

 그리고 포커스를 소유한 UI 요소의 현재 정보를 참조하기 위해 자동화 요소의 Current 속성을 사용합니다. 그리고 자동화 요소 정보에는 요소 이름, 클래스 이름 등의 자동화 요소의 정보를 제공합니다. 여기서는 요소 이름을 콘솔 화면에 출력하게 할게요.

 

static void FocusChangedEventHandler(object obj,

             AutomationFocusChangedEventArgs e)

{

    AutomationElement ae = AutomationElement.FocusedElement;

    Console.WriteLine(ae.Current.Name);

}

 

 진입점에서는 포커스 처리 이벤트 핸들러 개체를 생성하여 자동화 프레임워크에 등록합니다. 포커스 처리 이벤트 핸들러 개체는 UI 자동화 클라이언트의 메소드와 속성을 제공하는 Automation 클래스의 정적 메서드 AddAutomationFocusChangedEventHandler 메서드를 이용합니다. 그리고 제거할 때는 RemoveAutomationFocusChangedEventHandler를 이용합니다.

AutomationFocusChangedEventHandler afceh = null;

afceh = new AutomationFocusChangedEventHandler(FocusChangedEventHandler);

Automation.AddAutomationFocusChangedEventHandler(afceh);

Console.ReadLine();

Automation.RemoveAutomationFocusChangedEventHandler(afceh);

 

 

Program.cs


using System;

using System.Windows.Automation;

namespace 예제_2._1_포커스_트래커

{

    class Program

    {

        static void Main(string[] args)

        {

            AutomationFocusChangedEventHandler afceh = null;

            afceh = new AutomationFocusChangedEventHandler(

                            FocusChangedEventHandler);

            Automation.AddAutomationFocusChangedEventHandler(afceh);

            Console.ReadLine();

            Automation.RemoveAutomationFocusChangedEventHandler(afceh);

        }

        static void FocusChangedEventHandler(object obj,

                             AutomationFocusChangedEventArgs e)

        {

            AutomationElement ae = AutomationElement.FocusedElement;

            Console.WriteLine(ae.Current.Name);

        }

    }

}

[소스 2.1] 포커스 트레커 소스


포커스 트레커 실행화면

[그림 2.2] [소스 2.1] 실행 화면

반응형