이제 FindAll 메서드를 사용하는 간단한 콘솔 응용 프로그램을 만들어 봅시다. 이번에 만들 콘솔 응용 프로그램은 활성화 상태의 모든 버튼을 조사하는 기능을 수행할 것입니다.
이 프로그램에서는 UI 자동화 기술을 사용합니다. 이를 위해 프로젝트에 필요한 어셈블리를 참조하세요. 앞으로 작성하는 모든 프로그램은 위의 4가지 어셈블리를 참조합니다.
UIAutomationClient.dll
UIAutomationClientsideProviders.dll
UIAutomationTypes.dll
WindowBase.dll
static void Main(string[] args) { 먼저 AutomationElement의 정적 속성인 RootElement를 참조합니다. AutomationElement ae = AutomationElement.RootElement; 컨트롤 형식이 버튼을 찾기 위한 컨디션 개체를 생성합니다. Condition con_but = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button); 사용 가능한 상태를 찾기 위한 컨디션 개체를 생성합니다. Condition con_en = new PropertyCondition(AutomationElement.IsEnabledProperty, true); 생성한 두 개의 컨디션 개체로 AndConditon 개체를 생성합니다. Condition con_and = new AndCondition(con_but,con_en); FindAll 메서드를 이용하여 서브 트리의 원하는 조건의 자동화 요소를 탐색합니다. AutomationElementCollection aec= ae.FindAll(TreeScope.Subtree, con_and); 탐색한 요소들의 정보를 출력합니다. foreach (AutomationElement sae in aec){ ViewAEInfo(sae); } } private static void ViewAEInfo(AutomationElement ae) { 여기에서는 요소 이름과 윈도우 핸들, 프로세스 ID를 출력합시다. Console.Write("요소명:{0} ", ae.Current.Name); Console.Write(" 윈도우 창 핸들:{0}", ae.Current.NativeWindowHandle); Console.WriteLine(" 프로세스 ID:{0}", ae.Current.ProcessId); }
using System; using System.Windows.Automation; namespace 버튼_컨트롤_조사하기 { class Program { static void Main(string[] args) { AutomationElement ae = AutomationElement.RootElement; Condition con_but = new PropertyCondition( AutomationElement.ControlTypeProperty, ControlType.Button); Condition con_en = new PropertyCondition( AutomationElement.IsEnabledProperty, true); Condition con_and = new AndCondition(con_but,con_en); AutomationElementCollection aec= ae.FindAll(TreeScope.Subtree, con_and); foreach (AutomationElement sae in aec) { ViewAEInfo(sae); } } private static void ViewAEInfo(AutomationElement ae) { Console.Write("요소명:{0} ", ae.Current.Name); Console.Write(" 윈도우 창 핸들:{0}", ae.Current.NativeWindowHandle); Console.WriteLine(" 프로세스 ID:{0}", ae.Current.ProcessId); } } }
[소스 3.2] Program.cs