国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#使用SendMessage實現進程間通信的方法

2020-01-24 01:53:44
字體:
來源:轉載
供稿:網友

本文實例講述了C#使用SendMessage實現進程間通信的方法。分享給大家供大家參考。具體分析如下:

為了深入理解消息機制,先來做一個測試項目

在新建項目的Form1的代碼中,加入方法:

protected override void DefWndProc(ref Message m){   if (m.Msg == 0x200)  {    MessageBox.Show("捕捉到消息");  }   else   {   }   base.DefWndProc(ref m);}

此方法重寫了窗體的消息截獲代碼,運行后會發現,鼠標一移向窗體就會彈窗

對于一個可視控件來說,是不斷的在接受系統發送的消息的。比如鼠標懸停在某某控件上,就是一個消息,移出這個控件又是一個消息。如示例所示,其實鼠標移入窗體,窗體就獲得了一個消息,無論你寫沒寫過代碼,它都獲得了這個消息,一個消息對應觸發一個事件,編寫了事件代碼,就會執行相應的代碼操作。

事件里編寫的代碼,和方法里寫的代碼,最主要的不同就在于前者是不知道何時觸發,而后者是自己調用運行到那里就執行的。

那誰來決定某個事件何時觸發呢?那就是消息

示例中的0x200是一個消息類型,代表了鼠標移入窗體這個消息

現在討論一下如何利用這種消息機制來在進程之間傳遞值

需求:

程序A的主窗體里有一個全局變量

程序B的主窗體里有一個按鈕,點擊這個按鈕,獲取到程序A的這個變量

實現:

1. 新建一個解決方案,是程序A,窗體后臺代碼重寫DefWndProc

public partial class Form1 : Form {   public Form1()   {    InitializeComponent();   }   private void Form1_Load(object sender, EventArgs e)  {   }   protected override void DefWndProc(ref Message m)  {    if (m.Msg == 0x104)    {     m.Result = (IntPtr)333;     return;        }    else    {        }    base.DefWndProc(ref m);   } }

2. 新建一個解決方案,程序B,

public Form1() { InitializeComponent();}[DllImport("User32.dll", EntryPoint = "SendMessage")]private static extern IntPtr SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);private void button2_Click(object sender, EventArgs e){ Process[] arrPro = Process.GetProcessesByName("WindowsFormsApplication1.vshost"); IntPtr ip = SendMessage(arrPro[0].MainWindowHandle, 0x104, 1, 2);}

這樣,在按鈕點擊的時候,會向A發送一個消息,消息類型是104,兩個參數1和2,A能捕獲到,設置結果為333,那最后在B中的ip的值就是333

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙海市| 晋城| 包头市| 合川市| 晋江市| 衡阳市| 德令哈市| 孟连| 盐亭县| 云南省| 睢宁县| 邓州市| 阳信县| 金川县| 永城市| 南开区| 东方市| 兴和县| 杭锦后旗| 吉木乃县| 崇明县| 政和县| 晋宁县| 日土县| 元朗区| 什邡市| 青州市| 城市| 浠水县| 绍兴市| 安陆市| 犍为县| 屏边| 阿拉善左旗| 邢台县| 永泰县| 古丈县| 藁城市| 原平市| 宣武区| 英吉沙县|