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

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

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

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



 새로 고침 버튼을 눌렀을 때 이벤트 핸들러를 작성합시다.

private void btn_refresh_Click(object sender, EventArgs e)

{

프로세스 목록을 보여 줄 리스트 박스의 항목을 지우세요. 

    lbox_process.Items.Clear();


프로세스 목록을 얻어옵니다.

    Process[] processes = Process.GetProcesses();

얻어온 프로세스 목록의 각 프로세스를 추가하세요.

    foreach (Process process in processes)

    {

        AddProcess(process);

    }

}


WrapProcess는 앞에서 만들었던 것을 이용할게요.


private void AddProcess(Process process)

{

프로세스 중에 메인 윈도우 창이 있을 때만 리스트 목록에 추가하세요.

    if (process.MainWindowHandle != IntPtr.Zero)

    {

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

    }

}

 

 프로세스 목록 리스트 상자를 더블 클릭하면 선택한 항목의 프로세스 정보를 멤버 필드에 설정할게요.

WrapProcess pro = null;

private void lbox_process_MouseDoubleClick(object sender, MouseEventArgs e)

{

    if (lbox_process.SelectedIndex == -1)

    {

        pro = null;

        return;

    }

    pro = lbox_process.SelectedItem as WrapProcess;

}

 

 

 메인 폼이 로드할 때 포커스 변경 이벤트 발생 시 처리할 이벤트 핸들러를 등록합니다.

private void MainForm_Load(object sender, EventArgs e)

{

    WrapAutoEvent.AddFocusChangedEventHandler();

    WrapAutoEvent.ae_dele += new AutoElemDele(WrapAutoEvent_ae_dele);

}

void WrapAutoEvent_ae_dele(AutomationElement ae)

{

    throw new NotImplementedException();

}

 

 메인 폼이 닫힐 때 등록한 이벤트 핸들러를 해제합니다.

private void MainForm_FormClosed(object sender, FormClosedEventArgs e)

{

    WrapAutoEvent.RemoveFocusChangedEventHandler();

}

 

 UI 자동화 이벤트 핸들러를 등록하거나 해제하는 역할을 담당하는 부분은 별도의 클래스 WrapAutoEvent를 만들어 사용할게요.

 

using System;

using System.Windows.Automation;

 

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

{

    public delegate void AutoElemDele(AutomationElement ae);

 

    public class WrapAutoEvent

    {

        static AutomationFocusChangedEventHandler afc_handler = null;

        public static event AutoElemDele ae_dele = null;

 

 

 

        public static void AddFocusChangedEventHandler()

        {

            if (afc_handler == null)

            {

                afc_handler = new AutomationFocusChangedEventHandler(

                                        OnFocusChange);

                Automation.AddAutomationFocusChangedEventHandler(afc_handler);

            }

        }

 

        public static void RemoveFocusChangedEventHandler()

        {

            if (afc_handler != null)

            {

                Automation.RemoveAutomationFocusChangedEventHandler(afc_handler);

                afc_handler = null;

            }

        }

        static void OnFocusChange(Object obj, AutomationFocusChangedEventArgs e)

        {

            if (ae_dele != null)

            {

                ae_dele(obj as AutomationElement);

            }

        }

    }

}

[소스] WrapAutoEvent.cs


관련 게시글

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

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

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


프로젝트 파일

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


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

반응형