利用sendmessage实现c_进程间通信

利用sendmessage实现c_进程间通信

ID:36226341

大小:27.50 KB

页数:4页

时间:2019-05-07

利用sendmessage实现c_进程间通信_第1页
利用sendmessage实现c_进程间通信_第2页
利用sendmessage实现c_进程间通信_第3页
利用sendmessage实现c_进程间通信_第4页
资源描述:

《利用sendmessage实现c_进程间通信》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、进程之间通讯的几种方法:在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有使用内存映射文件通过共享内存DLL共享内存使用SendMessage向另一进程发送WM_COPYDATA消息比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.(ZT)WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据:这个函数的原型及其要用到的结

2、构如下:SendMessage(hwnd,WM_COPYDATA,wParam,lParam);其中,WM_COPYDATA对应的十六进制数为0x004AwParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:typedefstructtagCOPYDATASTRUCT{DWORDdwData;//用户定义数据DWORDcbData;//数据大小PVOIDlpData;//指向数据的指针}COPYDATASTRUCT;该结构用来定义用户数据。具体过程如下:首先,在发送方,用FindWindow找到接受方的句柄,然后向接受方发送WM_CO

3、PYDATA消息.接受方在DefWndProc事件中,来处理这条消息.由于中文编码是两个字节,所以传递中文时候字节长度要搞清楚.体代码如下://---------------------------------------------------//发送方:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.

4、Forms;usingSystem.Runtime.InteropServices;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{constintWM_COPYDATA=0x004A;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){}[DllImport("User32.dll",EntryPoint="SendMessage")]privatestaticexternintSe

5、ndMessage(inthWnd,//handletodestinationwindowintMsg,//messageintwParam,//firstmessageparameterrefCOPYDATASTRUCTlParam//secondmessageparameter);[DllImport("User32.dll",EntryPoint="FindWindow")]privatestaticexternintFindWindow(stringlpClassName,stringlpWindowName);privatevoidbutton1_Click(obj

6、ectsender,EventArgse){intWINDOW_HANDLER=FindWindow(null,@"欲发送程序窗口的标题");if(WINDOW_HANDLER!=0){byte[]sarr=System.Text.Encoding.Default.GetBytes(this.textBox1.Text);intlen=sarr.Length;COPYDATASTRUCTcds;cds.dwData=(IntPtr)100;cds.lpData=this.textBox1.Text;cds.cbData=len+1;SendMessage(WINDOW_HAN

7、DLER,WM_COPYDATA,0,refcds);}}}publicstructCOPYDATASTRUCT{publicIntPtrdwData;publicintcbData;[MarshalAs(UnmanagedType.LPStr)]publicstringlpData;}}//---------------------------------------------------//接受方//-------------------------------------------------

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。