WinForm实现跨进程通信的方法
本文实例展示了WinForm实现跨进程通信的方法,分享给大家供大家参考之用。具体方法如下:
主要功能代码如下:
publicclassWinMessageHelper { privatestructCOPYDATASTRUCT { publicIntPtrdwData; publicintcbData; [MarshalAs(UnmanagedType.LPStr)] publicstringlpData; } //使用COPYDATA进行跨进程通信 publicconstintWM_COPYDATA=0x004A; [DllImport("User32.dll",EntryPoint="SendMessage")] privatestaticexternintSendMessage( inthWnd,//handletodestinationwindow intMsg,//message intwParam,//firstmessageparameter refCOPYDATASTRUCTlParam//secondmessageparameter ); [DllImport("User32.dll",EntryPoint="FindWindow")] privatestaticexternintFindWindow(stringlpClassName,stringlpWindowName); ///<summary> ///发送消息 ///</summary> ///<paramname="windowReceiveTitle">接收方窗体标题名称</param> ///<paramname="strData">要发送的数据</param> publicstaticvoidSend(stringwindowReceiveTitle,stringstrData) { intwinHandler=FindWindow(null,windowReceiveTitle); if(winHandler!=0) { byte[]sarr=System.Text.Encoding.Default.GetBytes(strData); intlen=sarr.Length+1; COPYDATASTRUCTcds; cds.dwData=(IntPtr)100; cds.lpData=strData; cds.cbData=len; SendMessage(winHandler,WM_COPYDATA,0,refcds); } } ///<summary> ///接收消息 ///</summary> ///<example> ///在窗体中覆盖接收消息函数 ///protectedoverridevoidDefWndProc(refSystem.Windows.Forms.Messagem) ///{ ///switch(m.Msg) ///{ ///caseWinMessageHelper.WM_COPYDATA: ///stringstr=WinMessageHelper.Receive(refm); ///break; ///default: ///base.DefWndProc(refm); ///break; /// ///} ///} ///</example> ///<returns>接收的到数据</returns> publicstaticstringReceive(refSystem.Windows.Forms.Messagem) { COPYDATASTRUCTcds=newCOPYDATASTRUCT(); TypecdsType=cds.GetType(); cds=(COPYDATASTRUCT)m.GetLParam(cdsType); returncds.lpData; } }
希望本文所述实例对大家C#程序设计有所帮助。