這個過於簡單,實在湊不上幾個字,所以乾脆越簡單越好吧!!!!
用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小。當然你也可以兩端都註冊一個消息來通信。