中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#實現在應用程序間發送消息的方法示例

發布時間:2020-10-22 05:41:19 來源:腳本之家 閱讀:136 作者:kongxx 欄目:編程語言

本文實例講述了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#程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开远市| 蚌埠市| 班玛县| 博罗县| 区。| 科技| 巨野县| 梓潼县| 云霄县| 镇平县| 密云县| 西藏| 儋州市| 沙田区| 望谟县| 邹平县| 阿城市| 金阳县| 分宜县| 海晏县| 双辽市| 自治县| 方山县| 东阿县| 壤塘县| 汉阴县| 婺源县| 菏泽市| 德清县| 驻马店市| 区。| 弥渡县| 拉萨市| 双峰县| 荣昌县| 筠连县| 大悟县| 柳河县| 秦安县| 饶平县| 建昌县|