zl程序教程

您现在的位置是:首页 >  后端

当前栏目

WinForm实现跨进程通信的方法

2023-06-13 09:15:44 时间

本文实例展示了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#程序设计有所帮助。