欢迎光临
我们一直在努力

使用C#在应用程序间发送消息-.NET教程,C#语言

建站超值云服务器,限时71元/月

用c#在应用程序间发送消息

作者:kongxx

首先建立两个c#应用程序项目。

第一个项目包含一个windows form(form1),在form1上有一个button和一个textbox。

第二个项目包含一个windows form(form1),在form1上有两个button,分别用来测试第一个应用程序中button的click事件和修改第一个应用程序中textbox的值。

第一个应用程序中form的代码如下:

using system;

using system.drawing;

using system.collections;

using system.componentmodel;

using system.windows.forms;

public class form1 : system.windows.forms.form {

private system.windows.forms.button button1;

private system.windows.forms.textbox textbox1;

private system.componentmodel.container components = null;

[stathread]

static void main() {

application.run(new form1());

}

public form1()

{

initializecomponent();

}

protected override void dispose( bool disposing )

{

if( disposing )

{

if(components != null)

{

components.dispose();

}

}

base.dispose( disposing );

}

#region windows 窗体设计器生成的代码

private void initializecomponent()

{

this.button1 = new system.windows.forms.button();

this.textbox1 = new system.windows.forms.textbox();

this.suspendlayout();

//

// button1

//

this.button1.location = new system.drawing.point(32, 24);

this.button1.name = "button1";

this.button1.tabindex = 0;

this.button1.text = "button1";

this.button1.click += new system.eventhandler(this.button1_click);

//

// textbox1

//

this.textbox1.location = new system.drawing.point(32, 64);

this.textbox1.name = "textbox1";

this.textbox1.tabindex = 1;

this.textbox1.text = "textbox1";

//

// form1

//

this.autoscalebasesize = new system.drawing.size(6, 14);

this.clientsize = new system.drawing.size(292, 266);

this.controls.add(this.textbox1);

this.controls.add(this.button1);

this.name = "form1";

this.text = "form1";

this.resumelayout(false);

}

#endregion

private void button1_click(object sender, system.eventargs e) {

messagebox.show("this is button1 click!");

}

}

第二个应用程序中form的代码如下:

using system;

using system.text;

using system.drawing;

using system.collections;

using system.componentmodel;

using system.windows.forms;

using system.runtime.interopservices;

public class testform1 : system.windows.forms.form {

private system.windows.forms.button button1;

private system.windows.forms.button button2;

private system.componentmodel.container components = null;

[stathread]

static void main() {

application.run(new testform1());

}

public testform1()

{

initializecomponent();

}

protected override void dispose( bool disposing )

{

if( disposing )

{

if(components != null)

{

components.dispose();

}

}

base.dispose( disposing );

}

#region windows 窗体设计器生成的代码

private void initializecomponent()

{

this.button1 = new system.windows.forms.button();

this.button2 = new system.windows.forms.button();

this.suspendlayout();

//

// button1

//

this.button1.location = new system.drawing.point(32, 24);

this.button1.name = "button1";

this.button1.tabindex = 0;

this.button1.text = "button1";

this.button1.click += new system.eventhandler(this.button1_click);

//

// button2

//

this.button2.location = new system.drawing.point(32, 64);

this.button2.name = "button2";

this.button2.tabindex = 0;

this.button2.text = "button2";

this.button2.click += new system.eventhandler(this.button2_click);

//

// testform1

//

this.autoscalebasesize = new system.drawing.size(6, 14);

this.clientsize = new system.drawing.size(292, 266);

this.controls.add(this.button1);

this.controls.add(this.button2);

this.name = "testform1";

this.text = "testform1";

this.resumelayout(false);

}

#endregion

private void button1_click(object sender, system.eventargs e) {

intptr hwnd_win ;

intptr hwnd_button ;

hwnd_win = findwindow("windowsforms10.window.8.app3","form1");

hwnd_button = findwindowex(hwnd_win ,new intptr(0) ,"windowsforms10.button.app3","button1");

const int bm_click = 0x00f5;

message msg = message.create(hwnd_button ,bm_click ,new intptr(0),new intptr(0));

postmessage(msg.hwnd ,msg.msg ,msg.wparam ,msg.lparam);

}

private void button2_click(object sender, system.eventargs e) {

const int wm_char = 0x0102;

intptr hwnd_win ;

intptr hwnd_textbox ;

hwnd_win = findwindow("windowsforms10.window.8.app3","form1");

hwnd_textbox = findwindowex(hwnd_win ,new intptr(0) ,"windowsforms10.edit.app3","textbox1");

string strtext = "测试aaa";

unicodeencoding encode = new unicodeencoding();

char[] chars = encode.getchars(encode.getbytes(strtext));

message msg ;

foreach (char c in chars ) {

msg = message.create(hwnd_textbox ,wm_char ,new intptr(c),new intptr(0));

postmessage(msg.hwnd ,msg.msg ,msg.wparam ,msg.lparam);

}

}

[dllimport("user32.dll")]

public static extern intptr findwindow(string lpclassname, string lpwindowname);

[dllimport("user32.dll")]

public static extern intptr findwindowex(intptr hwndparent,intptr hwndchildafter,string lpszclass,string lpszwindow);

[dllimport("user32.dll",charset=charset.unicode)]

public static extern intptr postmessage(intptr hwnd,int wmsg,intptr wparam,intptr lparam);

}

以上代码可以在vs.net中编译运行,也可以使用csc.exe编译,如使用一下命令行:

f:>csc.exe form1.cs

f:>csc.exe testform1.cs

编译后生成两个.exe文件。

首先运行第一个程序,显示form1窗体,然后运行第二个程序,显示testform1窗体。

在testform1窗体上点击button1按钮(向form1窗体上的button1发送消息)此时显示对话框提示“this is button1 click!”。

在testform1窗体上点击button2按钮(向form1窗体上的textbox1发送消息)此时在form1上的textbox1上显示“测试aaa”。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用C#在应用程序间发送消息-.NET教程,C#语言
分享到: 更多 (0)

相关推荐

  • 暂无文章