有時候我們會遇到需要在兩個進程間通過某種方式實現互操作,方法有很多,例如你可以嘗試讓兩個進程持續監視一個外部文件,由此文件記錄各自進程的數據;還有可以使用網絡端口實現進程間通訊、共享一片內存區域記錄及傳遞各自進程的數據等;此處講述在.net 下如何利用消息的傳遞及處理實現兩個進程的通訊。
是的,這里所說的消息指的就是Windows的消息機制,對于 I T 菜鳥,可以這樣簡單理解Windows 消息機制:Windows系統可以同時運行很多很多應用程序,Windows系統要讓某一個程序做一件事情,就會給這個程序發送一條消息通知該程序該做什么了。
先引入Windows API 方法 SendMessage :
1 [DllImport("User32.dll", EntryPoint = "SendMessage")]2 PRivate static extern int SendMessage(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);
給指定用于響應消息的窗體對象重寫消息處理過程
1 protected override void WndProc(ref System.Windows.Forms.Message msg) 2 { 3 switch(msg.Msg) 4 { 5 case 0x0400: 6 bool OnOff = Convert.ToBoolean((int)msg.LParam); 7 break; 8 default: 9 base.WndProc(ref msg); 10 break; 11 }12 }
好了,上述代碼實現了接收消息的程序如何處理接收到的消息地址(ID)為0x0400的自定義消息。
現在只需要在用于發送消息的項目編寫發送消息的內容即可
1 SendMessage(Program.hWnd, 0x0400, (IntPtr)0, (IntPtr)1);
傳遞其它類型數據,請參照C# <-->C/C++ 類型轉換對照表,使用托管到非托管程序集轉換數據。
如傳遞String類型數據,SendMessage()傳string,接收的時候使用 string A = Marshal.PtrToStringAnsi(m.LParam) 。
新聞熱點
疑難解答