这个过于简单,实在凑不上几个字,所以干脆越简单越好吧!!!!
用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小。当然你也可以两端都注册一个消息来通信。