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

[S/W 접근성] 자동화 트리 (데스크 톱의 모든 하위 요소 출력)

언제나휴일 2016. 4. 19. 11:00
반응형

4. 자동화 트리

 

 UI 자동화 기술에서는 보조 기술이나 UI 클라이언트 응용 프로그램에서 자동화 요소 정보를 계층화하여 탐색 편의성을 제공하고 있습니다.

 

 UI 자동화 기술에서는 Raw , 컨트롤 뷰, 콘텐츠 뷰로 세 가지 기본 뷰를 제공합니다.

 

 Raw 뷰는 자동화 요소 개체의 전체 트리입니다. 컨트롤 뷰는 Raw 뷰의 하위 집합으로 상호 작용하는 UI 항목들로 구성하는 뷰이고 콘텐츠 뷰는 컨트롤 뷰의 하위 집합으로 콤보 박스처럼 사용자가 선택할 수 있는 항목들로 구성하고 있는 자동화 요소로 구성합니다.

 

 UI 자동화 기술에서는 세 가지의 자동화 트리를 사용할 수 있게 TreeWalker 클래스를 제공하고 있고 정적 필드로 RawViewWalker, ControlViewWalker, ContentViewWalker를 제공하고 있습니다.

TreeWalker tw = TreeWalker.RawViewWalker;

 

 그리고 TreeWalker 클래스에는 자식 요소를 탐색할 수 있는 다양한 메서드를 제공하고 있어 계층 구조에서 원하는 자동화 요소를 탐색하기 쉽습니다.

AutomationElement cae = tw.GetFirstChild(ae);

while (cae != null)

{

    ListAE(cae, depth + 1);

    cae = tw.GetNextSibling(cae);

}

 

 다음은 데스크 톱의 모든 하위 요소를 출력하는 예제입니다.

 

Program.cs


using System;

using System.Windows.Automation;

using System.Runtime.InteropServices;

 

namespace 자동화_트리_개요

{

    static class WrapApi

    {

        [DllImport("user32")]

        internal static extern IntPtr GetDesktopWindow();

    }

 

    class Program

    {

        static void Main(string[] args)

        {

            AutomationElement ae = AutomationElement.FromHandle(

                WrapApi.GetDesktopWindow());

            ListAE(ae,0);

        }

 

        private static void ListAE(AutomationElement ae,int depth)

        {

            TreeWalker tw = TreeWalker.RawViewWalker;

            if (ae == null)

            {

                return;

            }

 

            ViewAE(ae, depth);

            AutomationElement cae = tw.GetFirstChild(ae);

 

            while (cae != null)

            {

                ListAE(cae, depth + 1);

                cae = tw.GetNextSibling(cae);

            }

        }

 

        private static void ViewAE(AutomationElement ae,int depth)

        {

            Console.WriteLine("{0}:{1}", ae.Current.Name, depth);

        }

    }

}

[소스 4.1] 자동화 트리 개요




반응형