[소프트웨어 접근성] 포커스 소유 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
*개발 도구 환경 버전에 맞게 변환하세요.
'프로그래밍 기술 > 소프트웨어 접근성, UI 자동화' 카테고리의 다른 글
[소프트웨어 접근성] 가상 키보드 만들기 5 -한글 문자 생성기 (0) | 2016.05.13 |
---|---|
[소프트웨어 접근성] 가상 키보드 만들기 4 -한글 오토마타 만들기 개요 (0) | 2016.05.13 |
[소프트웨어 접근성] 가상 키보드 만들기 3 - 마우스 이벤트 예광탄 (0) | 2016.05.13 |
[소프트웨어 접근성] 가상 키보드 만들기 2 - 키보드 이벤트 예광탄 (2) | 2016.05.13 |
[소프트웨어 접근성] 가상 키보드 만들기 1 (1) | 2016.05.13 |
[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 3 (0) | 2016.05.12 |
[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 2 (0) | 2016.05.12 |
[소프트웨어 접근성] 포커스 소유 UI 요소 정보 수집기 만들기 1 (0) | 2016.05.12 |
[소프트웨어 접근성] 구조 변경 감시자 만들기 실습 (0) | 2016.05.05 |
[소프트웨어 접근성] 클라이언트 용 UI 자동화 이벤트 (0) | 2016.05.05 |