[轉載]用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

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