4.2 TreeWalker 메서드
TreeWalker 클래스에서는 다양한 형태로 트리 구조에서 계층적으로 자동화 요소를 검색할 수 있는 메서드를 제공하고 있습니다.
메서드 명 |
설명 |
GetFirstChild |
첫 번째 자식 요소를 검색 |
GetLastChild |
마지막 자식 요소를 검색 |
GetNextSibling |
다음 형제 요소를 검색 |
GetParent |
부모 요소를 검색 |
GetPreviousSibling |
이전 형제 요소를 검색 |
Normalize |
조건에 가장 근접한 요소 검색(자신을 포함하여 상위 노드에서) |
[표 4.1] TreeWalker 클래스의 검색 메서드
만약 특정 자동화 요소를 포함하는 윈도우 자동화 요소를 검색한다면 TreeWalker의 부모 요소를 검색하는 GetParent 메서드를 호출하는 것을 반복하여 검색한 요소의 컨트롤 형식이 창인지 확인하면 되겠죠.
TreeWalker walker = TreeWalker.ControlViewWalker;
while (ae!= null)
{
if (ae.Current.ControlType == ControlType.Window)
{
break;
}
ae = walker.GetParent(ae);
}
using System; using System.Windows.Automation; using System.Runtime.InteropServices;
namespace 요소를_포함하는_윈도우_검색 { class Program { static void Main(string[] args) { AutomationElement ae = AutomationElement.FromHandle( WrapApi.GetDesktopWindow()); ListAE(ae, 0); }
private static void ListAE(AutomationElement ae, int depth) { Condition cond1 = new PropertyCondition( AutomationElement.IsWindowPatternAvailableProperty, true); Condition cond2 = new PropertyCondition( AutomationElement.IsEnabledProperty, true); TreeWalker tw = new TreeWalker(new AndCondition(cond1, cond2)); 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) { AutomationElement pae = FindWindow(ae); string pname = "없음"; if (pae != null) { pname = pae.Current.Name; } Console.WriteLine("{0}:{1} 최상위:{2}", ae.Current.Name, depth, pname); }
private static AutomationElement FindWindow(AutomationElement ae) { TreeWalker walker = TreeWalker.ControlViewWalker; while (ae!= null) { if (ae.Current.ControlType == ControlType.Window) { break; } ae = walker.GetParent(ae); } return ae; } }
static class WrapApi { [DllImport("user32")] internal static extern IntPtr GetDesktopWindow(); } } |
[소스 4.3] 요소를 포함하는 윈도우 검색
'프로그래밍 기술 > 소프트웨어 접근성, UI 자동화' 카테고리의 다른 글
[S/W 접근성] InvokePattern (0) | 2016.04.19 |
---|---|
[S/W 접근성] GridPattern, GridItemPattern (0) | 2016.04.19 |
[S/W 접근성] ExpandCollapsePattern (0) | 2016.04.19 |
[S/W 접근성] DockPattern (0) | 2016.04.19 |
[S/W 접근성] 컨트롤 패턴 종류 (0) | 2016.04.19 |
[S/W 접근성] TreeWalker 개체 참조 (0) | 2016.04.19 |
[S/W 접근성] 자동화 트리 (데스크 톱의 모든 하위 요소 출력) (0) | 2016.04.19 |
[S/W 접근성] AutomationElement 메서드(속성 검색) (0) | 2016.04.19 |
[S/W 접근성] AutomationElement 메서드(자동화 요소 개체로 패턴 검색) (0) | 2016.04.19 |
[S/W 접근성] AutomationElement 메서드 (0) | 2016.04.19 |