工具

MFC---进程间的通信方式(WM_COPYDATA)_程序代码

要给进程发数据,首先要拿到进程的窗口句柄,也就必须先拿到标题。

MFC---进程间的通信方式(WM_COPYDATA)_程序代码_02

示例代码

发送端

void CWMCOPYDATASENDDlg::OnBnClickedSend()
{
	// TODO: 在此添加控件通知处理程序代码
	//必须要知道标题 句柄 
	CString strWindowTitle=_T("MFCRecv");
	CString strDataToSend=_T("Hello,this is Bingo WM_COPYDATA");
	//句柄
	HWND hRecvWnd=::FindWindow(NULL,strWindowTitle.GetBuffer(0));
	if(hRecvWnd!=NULL&&::IsWindow(hRecvWnd)){
		//数据的封装
		COPYDATASTRUCT cpd;
		cpd.dwData=0;
		cpd.cbData=strDataToSend.GetLength()*sizeof(TCHAR);
		cpd.lpData=(PVOID)strDataToSend.GetBuffer(0);
		::SendMessage(hRecvWnd,WM_COPYDATA,(WPARAM)(AfxGetApp()->m_pMainWnd),(LPARAM)&cpd);

	}
	strDataToSend.ReleaseBuffer();
}

接收端

BOOL CWMCOPYDATADlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	//消息响应函数
	//解析数据
	LPCTSTR szText=(LPCTSTR)(pCopyDataStruct->lpData);
	DWORD dwLength=(DWORD)pCopyDataStruct->cbData;
	TCHAR szRecvText[1024]={0};
	memcpy(szRecvText,szText,dwLength);
	MessageBox(szRecvText,_T("Bingo"),MB_OK);
	return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}

效果展示

MFC---进程间的通信方式(WM_COPYDATA)_程序代码_03