下载贤集网APP入驻自媒体
本文实例讲述了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);}#endregionprivate 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);}#endregionprivate 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.csF:>csc.exe TestForm1.cs复制代码