using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Automation;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TreeNode tn = new TreeNode();
AutomationElement r = AutomationElement.RootElement;
AutomationElement w = r.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "Notepad"));
AutomationElement menu = w.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "MenuBar"));
System.Windows.Automation.Condition c0 = new PropertyCondition(AutomationElement.IsControlElementProperty, true);
TreeWalker walker = new TreeWalker(c0);
walkElements(w, tn, walker);
ts(tn);
}
private void ts(TreeNode r) {
foreach (TreeNode e in r.Nodes) {
Console.WriteLine(e.ToString());
ts(e);
}
}
private void walkElements(AutomationElement r, TreeNode t, TreeWalker w)
{
AutomationElement e = w.GetFirstChild(r);
while (e != null)
{
TreeNode cTN = t.Nodes.Add(e.Current.Name);
walkElements(e, cTN, w);
e = w.GetNextSibling(e);
}
}
}
}
代码的作用从上图就看的清清楚楚了,是的,他就是遍历控件的方法。它无情地使用了递归方法,对于我们这些外行者,还是有些一个头变成两个大的感觉了。
不过对照一下记事本的截图,又觉得放松了很多。