获取另一个程序中第一个textbox的值怎么做?
另一个程序(也是c#程序)叫abc.exe,我想获取他的其中一个textbox的值,怎么做呢?帮忙写段代码吧...
另一个程序(也是c#程序)叫abc.exe,我想获取他的其中一个textbox的值,怎么做呢?帮忙写段代码吧
展开
1个回答
展开全部
跨进程访问子控件,唯有使用WINDOWS API底层函数才能做到这点。
获取另一个独立程序的子控件分为两种情况,一种是静态,另一种是动态。
静态:如果只是单纯地访问另一个C#程序的子控件,如textbox,可以用反射的手段。当然这个没意义,因为它还没有装入内存。
动态:唯有通过 windows api操作系统的底层接口函数才能做到。具体可以参见权威.NET平台调用官网:http://www.pinvoke.net/
注:用SendTextWindows 和GetTextWindows 、FindChildControl 这个三个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;
}
}
}
}
来自:求助得到的回答
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询