[转载]用WM_COPYDATA实现进程通信

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

用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小。当然你也可以两端都注册一个消息来通信。

 

【出处】:http://blog.113e.com/259662.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值