首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

通过反射设立其它进程窗口的属性和调用方法无效

2013-11-19 
通过反射设置其它进程窗口的属性和调用方法无效。本帖最后由 fanyufanyu 于 2013-11-14 17:20:42 编辑获取

通过反射设置其它进程窗口的属性和调用方法无效。
本帖最后由 fanyufanyu 于 2013-11-14 17:20:42 编辑 获取其它进程的属性值,可以得到。 
Pvalue=TF.Reflection_Get_Property(@"..\..\..\WindowsFormsUI\bin\Release" + filemainname + ".exe", "WindowsFormsUI.Form4", "Text", null);
  
 public Object Reflection_Get_Property(string Path, string NameSpaceAndClassName, string PropertyName,object[] index)
        {

            Assembly Ass = Assembly.LoadFrom(Path);
            Type TP = Ass.GetType(NameSpaceAndClassName);
            PropertyInfo PI = TP.GetProperty(PropertyName);
            object MeObj = System.Activator.CreateInstance(TP);
            return PI.GetValue(MeObj, index);
            
        }
类似的代码但设置值无效。
TF.Reflection_Set_Property(@"..\..\..\WindowsFormsUI\bin\Release" + filemainname + ".exe", "WindowsFormsUI.Form4", "Text", "Form(4)", null);

 public int Reflection_Set_Property(string Path, string NameSpaceAndClassName, string PropertyName, object value,object [] index)
        {

            Assembly Ass = Assembly.LoadFrom(Path);
            Type TP = Ass.GetType(NameSpaceAndClassName);
            PropertyInfo PI = TP.GetProperty(PropertyName);
            object MeObj = System.Activator.CreateInstance(TP);
            PI.SetValue(MeObj, value, index);
            return 0;
        }
反射调用其它窗口的方法,执行了但窗口没有效果。
TF.Reflection_Call_Method(@"..\..\..\WindowsFormsUI\bin\Release" + filemainname + ".exe", "WindowsFormsUI.Form4", "TestAdd2", new object[]{100,30});

 public int Reflection_Call_Method(string Path, string NameSpaceAndClassName, string MethodName, object[] Parameters)
        {

            Assembly Ass = Assembly.LoadFrom(Path);
            Type TP = Ass.GetType(NameSpaceAndClassName);
            MethodInfo MI = TP.GetMethod(MethodName); 
            object MeObj = System.Activator.CreateInstance(TP);
            MI.Invoke(MeObj, Parameters);
            return 0;
        }

被反射调用的代码
 public void TestAdd2(int a,int b)
        {
            int c;
            c = a + b;
            this.label1.Text = c.ToString();
            this.label1.Show();//通过界面调用可以得到结果,通过反射调用窗口label未改变
            Console.WriteLine(c);//通过反射调用可以得到结果
        }

整个执行过程无异常报错,只是窗口的属性值未改变,求助大家,反射刚开始学,很多东东还不会,谢谢! Reflection r反射 C# 跨进程 窗口访问
[解决办法]
谁告诉你反射可以做这个事的?直接大嘴巴子抽他,使劲抽,手没受伤就别停。
[解决办法]
反射可以操作private set,private method.但是不代表你set了以后就会产生效果。

要知道一个进程操作另外一个进程必须采用注入的方式。
[解决办法]
http://www.vckbase.com/index.php/wv/1340.html

ManagedSpy是写在一个名为ManagedSpyLib的托管C++库上的。ManagedSpyLib的目标是允许在另一个进程中按计划访问基于.NET Framework的窗体。ManagedSpyLib暴露了一个名为ControlProxy的类,它代表了在另一个进程中的一个控件。虽然它不是一个实际的控件,你可以访问它代表的所有属性和事件。 

ManagedSpyLib用一个内存映射(memory-mapped)文件在窥探和被窥探进程之间传递数据而起作用。

热点排行