获取另一个程序中第一个textbox的值怎么做?

另一个程序(也是c#程序)叫abc.exe,我想获取他的其中一个textbox的值,怎么做呢?帮忙写段代码吧... 另一个程序(也是c#程序)叫abc.exe,我想获取他的其中一个textbox的值,怎么做呢?帮忙写段代码吧 展开
 我来答
仙戈雅3n
2015-08-13 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:900万
展开全部
跨进程访问子控件,唯有使用WINDOWS API底层函数才能做到这点。
获取另一个独立程序的子控件分为两种情况,一种是静态,另一种是动态。

静态:如果只是单纯地访问另一个C#程序的子控件,如textbox,可以用反射的手段。当然这个没意义,因为它还没有装入内存。

动态:唯有通过 windows api操作系统的底层接口函数才能做到。具体可以参见权威.NET平台调用官网:http://www.pinvoke.net/

注:用SendTextWindows 和GetTextWindows 、FindChildControl 这个三个API函数,先获取指定进程的句柄,再由句柄操纵它。
追问
就是单纯的从获取另一个程序的texbox的值
追答

或者用这个办法,就是让调用方来启动abc.exe程序,并假定abc.exe文件放在D盘,则代码反射代码如下:

 // 调用方
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected Form FrmObject { get; set; }
        protected Assembly AsmObject { get; set; }
        
       private void Form1_Load(object sender, EventArgs e)
        {
            AsmObject = Assembly.LoadFile(@"D:\abc.exe");

            Type t = AsmObject.GetType("abc.Form1");
            FrmObject =(Form) Activator.CreateInstance(t);
            FrmObject.Show();
           
        }

       // 获取文本框的值
       private void button1_Click(object sender, EventArgs e)
       {
           Control.ControlCollection con = FrmObject.Controls;

           foreach (Control c in con)
           {
               if (c.GetType().Equals(typeof(System.Windows.Forms.TextBox)))
               {
                   MessageBox.Show("文本框的值是:" + c.Text);
                   break;
               }
           }
       }
     
    }
来自:求助得到的回答
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式