C#桌面程序的项目,最终生成一个Demo.exe文件。
Demo.exe文件内有若干个窗体,窗体内有若干个控件。
现在有另一个程序想通过反射Demo.exe,获取Demo.exe内指定窗体内的所有控件(不知道Control.Name)。有没相关的Demo或者做过类似需求的朋友给点提示?
Demo.exe文件内有若干个窗体,窗体内有若干个控件。
现在有另一个程序想通过反射Demo.exe,获取Demo.exe内指定窗体内的所有控件(不知道Control.Name)。有没相关的Demo或者做过类似需求的朋友给点提示?
Assembly asm = Assembly.LoadFile(@"exe路径");
foreach (Type type in asm.GetTypes())
{
if (type.IsSubclassOf(typeof(Form)))
{
Form f = Activator.CreateInstance(type) as Form;
if (f.Name == "窗口名称")
{
Control.ControlCollection collection = f.Controls;
foreach (Control c in collection)
Console.WriteLine(c.Name);
}
}
}
另外,不需要创建实例
Assembly asm = Assembly.LoadFile(@"exe路径");
foreach (Type type in asm.GetTypes())
{
if (type.IsSubclassOf(typeof(Form)))
{
var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
foreach (var field in fields)
{
if (field.FieldType.IsSubclassOf(typeof(Control)))
{
Console.WriteLine(field.Name);
}
}
}
}
Assembly asm = Assembly.LoadFile(@"exe路径");
foreach (Type type in asm.GetTypes())
{
if (type.IsSubclassOf(typeof(Form)) && type.Name == "查找的类名")
{
var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
foreach (var field in fields)
{
if (field.FieldType.IsSubclassOf(typeof(Control)))
{
Console.WriteLine(field.Name);
}
}
}
}
http://msdn.microsoft.com/en-us/library/ms633499(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ms633500(v=vs.85).aspx