工具
要给进程发数据,首先要拿到进程的窗口句柄,也就必须先拿到标题。
示例代码
发送端
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);
}
效果展示