Ejemplo n.º 1
0
        /// <summary>
        /// Walks the UI Automation tree and adds the control type of each element it finds
        /// in the control view to a TreeView.
        /// </summary>
        /// <param name="rootElement">The root of the search on this iteration.</param>
        /// <param name="treeNode">The node in the TreeView for this iteration.</param>
        /// <remarks>
        /// This is a recursive function that maps out the structure of the subtree beginning at the
        /// UI Automation element passed in as rootElement on the first call. This could be, for example,
        /// an application window.
        /// CAUTION: Do not pass in AutomationElement.RootElement. Attempting to map out the entire subtree of
        /// the desktop could take a very long time and even lead to a stack overflow.
        /// </remarks>
        private void WalkControlElements(AutomationElement rootElement, Tree_List <AutomationElement> treeNode)
        {
            // Conditions for the basic views of the subtree (content, control, and raw)
            // are available as fields of TreeWalker, and one of these is used in the
            // following code.
            AutomationElement elementNode = TreeWalker.ContentViewWalker.GetFirstChild(rootElement);

            while (elementNode != null)
            {
                //                if (elementNode.Current.ClassName == "AfxWnd80u")
                //                {
                //                    try
                //                    {
                //                        elementNode.SetFocus();
                //                        Feedback.print("*okay*");
                //                    }
                //                    catch
                //                    {
                //                    }
                ////Control control =                    Control.FromHandle((IntPtr)elementNode.Current.NativeWindowHandle);
                ////control.Select();
                //                 //   SilentOrb.Utility.Windows.set_foreground_window((IntPtr)elementNode.Current.NativeWindowHandle);
                //                }
                Tree_List <AutomationElement> childTreeNode = treeNode.add(elementNode);
                WalkControlElements(elementNode, childTreeNode);
                elementNode = TreeWalker.ContentViewWalker.GetNextSibling(elementNode);
            }
        }