//treewalker객체로 트리완성하는 함수. 매개변수로 treewalker, automationelement가 들어있는 automationelementwrapper에 넣어준다 private static void TraverseElement(TreeWalker walker, AutomationElementWrapper automationElementWrapper) { AutomationElement child = walker.GetFirstChild(automationElementWrapper.AE); //treewalker를 통해 해당 automationelement의 첫번째 자식을 chlld에 넣어준다 while (child != null) //자식이 없을때까지 반복 { AutomationElementWrapper caew = new AutomationElementWrapper(child); //마찬가지로 자식도 하위 프로세스가 있으므로 add를 쉽게하기위해 // wrapping을 해준다 automationElementWrapper.Add(caew); TraverseElement(walker, caew); //자식을 다시 매개변수로 넣어 재귀로 트리를 완선시킨다. child = walker.GetNextSibling(child); //한 자식에 대한 정보가 완료된 경우 getnextsibling이란 함수로 다음 자식에대한 정보를 child에 넣고 반복 } }
private static void TraverseElement(TreeWalker walker, AutomationElementWrapper automationElementWrapper) { Queue <AutomationElementWrapper> elementQueue = new Queue <AutomationElementWrapper>(); elementQueue.Enqueue(automationElementWrapper); while (elementQueue.Count > 0) { AutomationElementWrapper aew = elementQueue.Dequeue(); AutomationElement child = walker.GetFirstChild(aew.AE); while (child != null) { AutomationElementWrapper caew = new AutomationElementWrapper(child); aew.Add(caew); elementQueue.Enqueue(caew); child = walker.GetNextSibling(child); } } }