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

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 4

언제나휴일 2016. 5. 12. 17:59
반응형

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 4



 이제 자동화 요소의 공통 속성을 리스트 뷰 항목에 추가하는 SetAEProperty 메서드를 구현해 봅시다.

 

 여기에서는 먼저 리스트 뷰의 현재 항목을 제거합니다. 그리고 자동화 속성 이름과 값으로 리스트 뷰 항목 개체를 만들어 리스트 뷰에 추가합시다.

private void SetAEProperty(AutomationElement ae)

{

    lv_ae_info.Items.Clear();

    lv_ae_info.Items.Add(MakeLVItem("AcceleratorKey", ae.Current.AcceleratorKey));

    ...중략...

}

private ListViewItem MakeLVItem(string key, object value)

{

    if ((value == null) ||(value.ToString() == string.Empty)){    value = "N/A";    }

    string[] items = new string[2];

    items[0] = key;

    items[1] = value.ToString();

    return new ListViewItem(items);

}

 

 

 자동화 요소 패턴을 리스트 상자에 항목 추가하는 부분은 WrapAE 클래스의 GetPattern 메서드를 사용하여 추가하면 됩니다.

private void SetAEPattern(WrapAE wae)

{

    Object obj = null;

    lbox_ae_pattern.Items.Clear();

    for (DPType dt = DPType.DP_NONE + 1; dt < DPType.DP_MAX; dt++)

    {

        obj = wae.GetPattern(dt);

        if (obj != null)

        {

            lbox_ae_pattern.Items.Add(obj);

        }

    }

}

 

using System;

using System.Windows.Forms;

using System.Windows.Automation;

using System.Diagnostics;

 

namespace 포커스_소유_UI_요소_정보_수집기

{

    public partial class MainForm : Form

    {

        WrapProcess pro = null;

        public MainForm()

        {

            InitializeComponent();

        }

 

 

 

        private void MainForm_Load(object sender, EventArgs e)

        {

            WrapAutoEvent.AddFocusChangedEventHandler();

            WrapAutoEvent.ae_dele += new AutoElemDele(WrapAutoEvent_ae_dele);

        }

        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)

        {

            WrapAutoEvent.RemoveFocusChangedEventHandler();

        }

        delegate void SetAEInfoDele(AutomationElement ae);

        void WrapAutoEvent_ae_dele(AutomationElement ae)

        {

            if (pro == null) {    return;    }

            if (ae.Current.ProcessId == pro.ID)

            {

                if (this.InvokeRequired)

                {               

                    object[] objs = new object[1];

                    objs[0] = ae;

                    this.Invoke(new SetAEInfoDele(SetAEInfo), objs);

                }

            }

        }

        void SetAEInfo(AutomationElement ae)

        {

            WrapAE wae = new WrapAE(ae);

            lb_ae_name.Text = wae.ToString();

            SetAEProperty(wae.AE);

            SetAEPattern(wae);

        }

 

        private void SetAEPattern(WrapAE wae)

        {

            Object obj = null;

            lbox_ae_pattern.Items.Clear();

            for (DPType dt = DPType.DP_NONE + 1; dt < DPType.DP_MAX; dt++)

            {

                obj = wae.GetPattern(dt);

                if (obj != null)

                {

                    lbox_ae_pattern.Items.Add(obj);

                }

            }

        }

        private void SetAEProperty(AutomationElement ae)

        {

            lv_ae_info.Items.Clear();

            lv_ae_info.Items.Add(MakeLVItem("AcceleratorKey",

                                        ae.Current.AcceleratorKey));

            lv_ae_info.Items.Add(MakeLVItem("AccessKey", ae.Current.AccessKey));

            lv_ae_info.Items.Add(MakeLVItem("AutomationId",ae.Current.AutomationId));

            lv_ae_info.Items.Add(MakeLVItem("BoundingRectangle",

                                         ae.Current.BoundingRectangle));

            lv_ae_info.Items.Add(MakeLVItem("ClassName", ae.Current.ClassName));

            lv_ae_info.Items.Add(MakeLVItem("ControlType",

                                         ae.Current.ControlType.ProgrammaticName));

            lv_ae_info.Items.Add(MakeLVItem("FrameworkId", ae.Current.FrameworkId));

            lv_ae_info.Items.Add(MakeLVItem("HasKeyboardFocus",

                                         ae.Current.HasKeyboardFocus));

            lv_ae_info.Items.Add(MakeLVItem("HelpText", ae.Current.HelpText));

            lv_ae_info.Items.Add(MakeLVItem("IsContentElement",

                                          ae.Current.IsContentElement));

            lv_ae_info.Items.Add(MakeLVItem("IsControlElement",

                                          ae.Current.IsControlElement));

            lv_ae_info.Items.Add(MakeLVItem("IsEnabled", ae.Current.IsEnabled));

            lv_ae_info.Items.Add(MakeLVItem("IsKeyboardFocusable",

                                          ae.Current.IsKeyboardFocusable));

            lv_ae_info.Items.Add(MakeLVItem("IsOffscreen", ae.Current.IsOffscreen));

            lv_ae_info.Items.Add(MakeLVItem("IsPassword", ae.Current.IsPassword));

            lv_ae_info.Items.Add(MakeLVItem("IsRequiredForForm",

                                          ae.Current.IsRequiredForForm));

            lv_ae_info.Items.Add(MakeLVItem("ItemStatus", ae.Current.ItemStatus));

            lv_ae_info.Items.Add(MakeLVItem("ItemType", ae.Current.ItemType));

            lv_ae_info.Items.Add(MakeLVItem("LabeledBy", ae.Current.LabeledBy));

            lv_ae_info.Items.Add(MakeLVItem("LocalizedControlType",

                                          ae.Current.LocalizedControlType));

            lv_ae_info.Items.Add(MakeLVItem("Name", ae.Current.Name));

            lv_ae_info.Items.Add(MakeLVItem("NativeWindowHandle",

                                          ae.Current.NativeWindowHandle));

            lv_ae_info.Items.Add(MakeLVItem("Orientation", ae.Current.Orientation));

            lv_ae_info.Items.Add(MakeLVItem("ProcessId", ae.Current.ProcessId));

        }

        private ListViewItem MakeLVItem(string key, object value)

        {

            if ((value == null) ||(value.ToString() == string.Empty))

            {

                value = "N/A";

            }

            string[] items = new string[2];

            items[0] = key;

            items[1] = value.ToString();

            return new ListViewItem(items);

        }

        private void btn_refresh_Click(object sender, EventArgs e)

        {

            lbox_process.Items.Clear();

            Process[] processes = Process.GetProcesses();

            foreach (Process process in processes)

            {

                AddProcess(process);

            }

        }

        private void AddProcess(Process process)

        {

            if (process.MainWindowHandle != IntPtr.Zero)

            {

                lbox_process.Items.Add(new WrapProcess(process));

            }

        }

        private void lbox_process_MouseDoubleClick(object sender, MouseEventArgs e)

        {

            if (lbox_process.SelectedIndex == -1)

            {

                pro = null;

                return;

            }

            pro = lbox_process.SelectedItem as WrapProcess;

        }

    }

}

[소스] MainForm.cs


관련 게시글

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 1

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 2

[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 3


프로젝트 파일

예제 7.2 포커스 소유 UI 요소 정보 수집기.zip

*개발 도구 환경 버전에 맞게 변환하세요.

반응형