用WM_COPYDATA实现进程通信

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

这个过于简单,实在凑不上几个字,所以干脆越简单越好吧!!!!

用WM_COPYDATA的前提:

1,知道接收消息进程的句柄。

2,接收消息进程重载了WM_COPYDATA消息映射,能对其做出反应(否则不是发送端自作多情了?)

看过前提,的出结论:在自己写的两个进程间用WM_COPYDATA再好不过。

下面CODE几行就说明了一切。

获得句柄的方法,最简单的方法就是使用FindWindow,找窗口类,或者名,如果你觉得这样不把握,那就利用SetProp个窗口做个记号....(不说这些,跑踢儿了都)

OK,开始写发送端代码:

HWND hWnd = FindWindow(NULL,"MyApp");

if(hWnd!=NULL)

{

COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/

cpd.dwData = 0;

cpd.cbData = strlen("字符串");

cpd.lpData = (void*)"字符串";

::SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cpd);//发送!

/*完事儿了!!*/

}

接收端重载ON_WM_COPYDATA消息映射函数(下面是手工所要加的,你最好还是用ClassWizard)

afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);

ON_WM_COPYDATA()/*消息映射*/

BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)

{

AfxMessageBox((LPCSTR)(pCopyDataStruct->lpData));/*利用对话框表示收到消息*/

return CWnd::OnCopyData(pWnd, pCopyDataStruct);

}

进程通信还有其他一些手段,相对来说比较麻烦,但局限性要比WM_COPYDATA小。当然你也可以两端都注册一个消息来通信。

胡说完毕。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有