使用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”。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-545025/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在python中使用itchat傳送微信訊息Python
- 使用Java客戶端傳送訊息和消費的應用Java客戶端
- 使用 laravel-wechat-notification 傳送微信模板訊息、企業微信應用訊息Laravel
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 小程式傳送訂閱訊息
- django+小程式傳送模板訊息Django
- RocketMQ(八):訊息傳送MQ
- 【RocketMQ】MQ訊息傳送MQ
- 訊息中介軟體—RocketMQ訊息傳送MQ
- TNW-傳送模板訊息TNW
- RocketMQ(九):訊息傳送(續)MQ
- 鴻蒙傳送訊息通知鴻蒙
- 6-RocketMQ傳送訊息MQ
- 使用Azure Runbook 傳送訊息到Azure Storage Queue
- vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)Vue元件
- laravel中使用利用訊息佇列傳送郵件Laravel佇列
- gnome-shell 使用 notify-send 傳送桌面訊息
- RocketMQ中Producer訊息的傳送MQ
- Runtime備忘-訊息傳送流程
- Python呼叫飛書傳送訊息Python
- Kafka -- 訊息傳送儲存流程Kafka
- 快速向 Google Chat 傳送訊息Go
- RocketMQ -- 訊息傳送儲存流程MQ
- 傳送不同型別的訊息型別
- 排查MQ訊息傳送和接收MQ
- 我用這種方法在 Spring 中實現訊息的傳送和消費Spring
- uwsgi多程式配合kafka-python訊息無法傳送KafkaPython
- 微信小程式 傳送模板訊息的功能實現微信小程式
- Android Handler 訊息傳送效能優化Android優化
- 分散式事務:訊息可靠傳送分散式
- 0x2_訊息的傳送
- WIN32傳送自定義訊息Win32
- 以事務方式傳送 Kafka 訊息Kafka
- RocketMQ - 生產者訊息傳送流程MQ
- 傳送kafka訊息的shell指令碼Kafka指令碼
- 用python為喜歡的人寫一個程式,每天傳送貼心的訊息Python
- Azure Service Bus(三)在 .NET Core Web 應用程式傳送ServiceBus QueueWeb
- 微信程式開發系列教程(二)使用JavaScript給微信使用者傳送訊息JavaScript
- Laravel 中使用 Beanstalkd 訊息佇列系統傳送郵件LaravelBean佇列