//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에 넣고 반복
            }
        }
        //해당 treeviewitem에서 uiautomationelement에 대한 정보를 미리 찾아주는 함수
        private static void UIAutomationElementFinder(TreeViewWrapper wrapper)                  //treeviewitem이 담겨있는 treeviewwrapper를 넘겨준다
        {
            Process proc = (Process)wrapper.Node.Tag;                                           //넘겨준 treeviewwrapper객체의 상세설명인 tag를 변수 proc에 저장해준다

            AutomationElement        ae  = AutomationElement.FromHandle(proc.MainWindowHandle); //proc을 다룰수있는 핸들에 관한 정보를 automationelement 객체에 넣어준다
            AutomationElementWrapper aew = new AutomationElementWrapper(ae);                    //마찬가지로 automationelement객체의 add를 쉽게해주기위해 automationelementwrapper에 넣어준다

            wrapper.Add(aew.Node);
            wrapper.Node.ExpandSubtree();  //매개변수로 넘겨진 프로세스의 하위트리를 한단계 펼쳐준다


            TreeWalker walker = TreeWalker.RawViewWalker; // treewalker객체 rawviewwalker로 만들어주어 모든 트리를 순회가능하도록 생성하고, 만들어진

            //트리를 순회하면서 완성하도록한다.(미리 정보가져오기위함)
            TraverseElement(walker, aew);
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        public void MakeTree()
        {
            Queue <AutomationElement> aeQueue = GetRootInit();

            TreeWalker walker = TreeWalker.RawViewWalker;

            while (aeQueue.Count > 0)
            {
                try
                {
                    AutomationElement        ae  = aeQueue.Dequeue();
                    AutomationElementWrapper aew = new AutomationElementWrapper(ae);
                    TreeView.Items.Add(aew.Node);
                    Process p = Process.GetProcessById(ae.Current.ProcessId);

                    aew.Node.Header = p.MainModule.ModuleName + ", " + ae.Current.Name;
                    TraverseElement(walker, aew);
                }
                catch (Exception)
                {
                    continue;
                }
            }
        }
Example #5
0
 public void Add(AutomationElementWrapper aew)
 {
     Node.Items.Add(aew.Node);
 }