Exemple #1
0
 private void LoadTree(SystemAccessibleObject sao)
 {
     tree.Nodes.Clear();
     if (sao == null) return;
     IntPtr hwnd = sao.Window.HWnd;
     List<SystemAccessibleObject> parents = new List<SystemAccessibleObject>();
     parents.Add(sao);
     while (true)
     {
         sao = sao.Parent;
         if (sao == null) break;
         if (!allParents.Checked && sao.Window.HWnd != hwnd) break;
         parents.Add(sao);
     }
     sao = parents[parents.Count-1];
     parents.RemoveAt(parents.Count - 1);
     TreeNode curr = new TreeNode(sao.ToString());
     curr.Tag = sao;
     tree.Nodes.Add(curr);
     LoadTreeChildren(curr);
     while (parents.Count > 0)
     {
         sao = parents[parents.Count - 1];
         parents.RemoveAt(parents.Count - 1);
         TreeNode newcurr = null;
         foreach (TreeNode sub in curr.Nodes)
         {
             if ((SystemAccessibleObject)sub.Tag == sao)
             {
                 newcurr = sub;
                 break;
             }
         }
         if (newcurr == null)
         {
             foreach (TreeNode sub in curr.Nodes)
             {
                 if (sao.Equals((SystemAccessibleObject)sub.Tag))
                 {
                     newcurr = sub;
                     break;
                 }
             }
         }
         if (newcurr == null)
         {
             newcurr = new TreeNode("!! " + sao.ToString());
             newcurr.Tag = sao;
             curr.Nodes.Add(newcurr);
         }
         curr = newcurr;
         LoadTreeChildren(curr);
     }
     tree.SelectedNode = curr;
 }