[转载]用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章