欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现在应用程序间发送消息的方法示例

程序员文章站 2023-11-26 23:12:58
本文实例讲述了c#实现在应用程序间发送消息的方法。分享给大家供大家参考,具体如下: 首先建立两个c#应用程序项目。 第一个项目包含一个windows form(form...

本文实例讲述了c#实现在应用程序间发送消息的方法。分享给大家供大家参考,具体如下:

首先建立两个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”。

更多关于c#相关内容感兴趣的读者可查看本站专题:《winform控件用法总结》、《c#窗体操作技巧汇总》、《c#数据结构与算法教程》、《c#常见控件用法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结

希望本文所述对大家c#程序设计有所帮助。