采用窗体传值和委托的知识点: 我给你写几个代码你看看,在窗体Form1中的文本框中输入汉字,点击确定按钮,在Form2中的文本框中显示,然后在from2中的文本框中输入汉字,点击确定,让显示在Form1中的TextBox.Text中 namespace _02窗体传值 { public partial class Form1 : Form { public Form1(string st) { InitializeComponent(); textBox1.Text = st; } public Form1() { InitializeComponent();
} private void button1_Click(object sender, EventArgs e) { Form2 for2 = new Form2(textBox1.Text); for2.Show(); Form1 for1 = new Form1(textBox1.Text); for1.Close();
} private void Form1_Load(object sender, EventArgs e) { } } }下面是Form2窗体的代码 namespace _02窗体传值 { public partial class Form2 : Form { public Form2(string st) { InitializeComponent(); textBox1.Text = st; } private void Form2_Load(object sender, EventArgs e) {
如果A程序做了相应的操作,则把命令传送到B程序上。
在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
如果A程序做了相应的操作,则把命令传送到B程序上。
在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
你这是两个端口啊,你直接让学生端的屏幕显示你的不就行了嘛
如果A程序做了相应的操作,则把命令传送到B程序上。
在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
你这是两个端口啊,你直接让学生端的屏幕显示你的不就行了嘛是两个程序啊。 老师的机器是老师端,学生的机器是学生端,老师点控制的时候,才会控制学生端的操作。你说的直接显示,我没理解。。
情况1.如果客户程序中有textbox等控件存放输入数值,比较简单,只需修改你的程序
在导入的点击事件中使用api查找客户窗体,然后再查找textbox,还是利用api给客户程序textbox赋值。
情况2.如果客服程序没有textbox等控件存放输入数值,需要修改客户程序,而且麻烦
客户程序打开后,要先判断你的程序是否打开,如果打开,要使用钩子,监视鼠标点击和键盘回车事件,如果是点击[导入],那么就用api获取输入(类似情况1)
如果A程序做了相应的操作,则把命令传送到B程序上。
在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
你这是两个端口啊,你直接让学生端的屏幕显示你的不就行了嘛是两个程序啊。 老师的机器是老师端,学生的机器是学生端,老师点控制的时候,才会控制学生端的操作。你说的直接显示,我没理解。。
我的意思是 你 直接控制学生电脑的屏幕显示内容
方案1:
你的程序为A,用户的程序为B,假如你有权限可以修改B的源码的话那就在B处开辟个线程,这个线程专门去轮询A的导入操作,加入A的导入操作是在按钮“导入”下完成的,那么这个按钮的TYPE和TITLE就是固定的,句柄是不固定的,不好去作判断,用这俩个条件一般就够了。B中线程只要捕捉到这个类型的按钮消息时就去获取数据,(获取该按钮句柄,类型,名称的小例子很多,这个可以找到)。但是怎么把值传过来我就没做过了,不过可以在A导入数据的里面写一个操作txt之类的功能,先将数据存起来。然后B获取改按钮的消息时自己去读TXT。
方案2:
假如无法去修改B,那就反过来,去写个小例子先。去找到B中要获取数据的窗体或者控件的唯一标示,在A中新加一个方法,只要A进行了导入,就去sendMessage,触发B。仅供参考。
每一个控件在窗体上都被认为是一个子窗体 获取到窗体句柄之后 IntPtr hwnd = FindWindow(null, "你需要获取的窗体的标题,例如:Form1");
IntPtr ButtonHwnd= FindWindowEx(hwnd, IntPtr.Zero, "控件的名字", null); 这样就能得到控件的句柄
SendMessage(ButtonHwnd, WM_SETTEXT, IntPtr.Zero, name); 这样就能更改控件的内容了
具体参考:
http://www.cnblogs.com/vvv999vz/archive/2011/08/03/2125895.html
我给你写几个代码你看看,在窗体Form1中的文本框中输入汉字,点击确定按钮,在Form2中的文本框中显示,然后在from2中的文本框中输入汉字,点击确定,让显示在Form1中的TextBox.Text中
namespace _02窗体传值
{
public partial class Form1 : Form
{
public Form1(string st)
{
InitializeComponent();
textBox1.Text = st;
}
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form2 for2 = new Form2(textBox1.Text);
for2.Show();
Form1 for1 = new Form1(textBox1.Text);
for1.Close();
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}下面是Form2窗体的代码
namespace _02窗体传值
{
public partial class Form2 : Form
{
public Form2(string st)
{
InitializeComponent();
textBox1.Text = st;
}
private void Form2_Load(object sender, EventArgs e)
{
} private void button1_Click(object sender, EventArgs e)
{
Form1 for1 = new Form1(textBox1.Text);
for1.Show();
}
}
}
每一个控件在窗体上都被认为是一个子窗体 获取到窗体句柄之后 IntPtr hwnd = FindWindow(null, "你需要获取的窗体的标题,例如:Form1");
IntPtr ButtonHwnd= FindWindowEx(hwnd, IntPtr.Zero, "控件的名字", null); 这样就能得到控件的句柄
SendMessage(ButtonHwnd, WM_SETTEXT, IntPtr.Zero, name); 这样就能更改控件的内容了
具体参考:
http://www.cnblogs.com/vvv999vz/archive/2011/08/03/2125895.html
恩,已经大体实现功能了,但是遇到一个问题,就是那个窗体上的文本框很多,我已经定义好一个类来存储所有文本框的句柄了,但是我想写一个方法给定义这个类的属性赋值,不知道如何写?能给我个思路吗?
这个页面这么多textbox文本框,我已经定义好一个类,里面的属性都是IntPtr类型的用来存储这些textBox的句柄,我也已经知道FindWindowEx这个函数的第二个参数了,
我想实现的是 如何通过一个方法来给我定义的那些属性赋值。
下面是我获取一个textbox文本框的句柄并赋值StringBuilder sb = new StringBuilder(255);
IntPtr win = FindWindow(null, "xxxx管理软件");
//CloseWindow(win);
GetClassName(win, sb, 255);
string className = sb.ToString().Substring(sb.ToString().IndexOf(".app"));
string name = "1"; IntPtr txt = FindWindowEx(win, IntPtr.Zero, "WindowsForms10.EDIT" + className, null); SendMessage(txt, WM_SETTEXT, IntPtr.Zero, name);
你的第二个问题就比较难控制了,想一想可以通过API来实现,或者通过第三方的媒介,比如说,调用程序发布指令后写到某处,然后被调用程序实时轮巡,如果发现相应指令,内部控制进行执行