1 發(fā)送消息的程序中比較簡(jiǎn)單,在要發(fā)送的地方加入如下代碼就行了:
void CSendDlg::OnSend()
{
// TODO: Add your control notification handler code here
CString str="這是我要發(fā)送的給另外一個(gè)進(jìn)程字符串。";
COPYDATASTRUCT myCopyDATA;
myCopyDATA.cbData=str.GetLength();
myCopyDATA.lpData=str.GetBuffer(0);
str.ReleaseBuffer();
HWND hwnd=::FindWindow(NULL,"Receive"); //假設(shè)目標(biāo)程序窗口標(biāo)題為"Receive"
if (hwnd)
::SendMessage(hwnd,WM_COPYDATA,NULL,(LPARAM)&myCopyDATA);
else
AfxMessageBox("目標(biāo)程序沒有運(yùn)行。");
}
2 接收消息的程序(這里假設(shè)是基于對(duì)話框的工程)請(qǐng)按如下步驟來實(shí)現(xiàn):
先給對(duì)話框類CReceiveDlg(如果你的接收程序?yàn)镾DI工程的話,把CReceiveDlg類換成CMainFrame類)添加一個(gè)消息處理函數(shù)LRESULT OnReceive(WPARAM wParam,LPARAM lParam),代碼如下:
LRESULT CReceiveDlg::OnReceive(WPARAM wParam,LPARAM lParam)
{
COPYDATASTRUCT *p = NULL ;
p = (COPYDATASTRUCT*)lParam;
CString strTemp;
memcpy(strTemp.GetBuffer((int)p->cbData),p->lpData,p->cbData);
strTemp.ReleaseBuffer();
AfxMessageBox(strTemp);
return 0;
}
接著再給工程設(shè)定剛才添加的函數(shù)OnReceive為WM_COPYDATA消息的響應(yīng)函數(shù),在ReceiveDlg.cpp文件中如下地方加入一行代碼:
BEGIN_MESSAGE_MAP(CReceiveDlg, CDialog)
//{{AFX_MSG_MAP(CReceiveDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_COPYDATA,OnReceive) //只要添加這一行進(jìn)行WM_COPYDATA消息映射
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
好了,現(xiàn)在分別運(yùn)行兩個(gè)程序,應(yīng)該可以在A程序中給B程序發(fā)送消息了,B收到消息后會(huì)彈出個(gè)MessageBox來顯示從A程序發(fā)送來消息了。