C#使用訊息(SendMessage)進行跨進程操作

來源:互聯網
上載者:User

為了深入理解訊息機制,先來做一個測試專案

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

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

此方法重寫了表單的訊息截獲代碼,運行後會發現,滑鼠一移向表單就會彈窗

對於一個可視控制項來說,是不斷的在接受系統發送的訊息的。比如滑鼠移至上方在某某控制項上,就是一個訊息,移出這個控制項又是一個訊息。如樣本所示,其實滑鼠移入表單,表單就獲得了一個訊息,無論你寫沒寫過代碼,它都獲得了這個訊息,一個訊息對應觸發一個事件,編寫了事件代碼,就會執行相應的代碼操作。

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

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

 

樣本中的0x200是一個訊息類型,代表了滑鼠移入表單這個訊息,更多的訊息類型請參考http://wenku.baidu.com/view/31d5b471f46527d3240ce03b.html

 

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

需求:

程式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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.