使用C#在应用程序间发送消息

it2022-05-09  29

首先建立两个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);  }首先运行第一个程序,显示Form1窗体,然后运行第二个程序,显示TestForm1窗体。

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

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

转载于:https://www.cnblogs.com/tuyile006/archive/2006/08/30/490131.html


最新回复(0)