利用windows系统消息WM_COPYDATA,从一个进程(程序)向另外一个进程(程序)发送消息,从而达到响应另外一个程序命令的功能。
在接收程序中添加WM_COPYDATA响应事件。并处理另外程序发送的消息。
BOOL CReceiverDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: Add your message handler code here and/or call default
SetDlgItemText(IDC_MSG,(LPCTSTR)(pCopyDataStruct->lpData));
CString *str;
str = (CString*)(pCopyDataStruct->lpData);
//添加菜单
CMenu menu;
menu.LoadMenu(IDR_MENU1);
menu.AppendMenu(MF_STRING,0,(LPCTSTR)(pCopyDataStruct->lpData));
SetMenu(&menu);
当然可以通过分析字符串来做其它工作。
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
在发送数据程序中添加发送数据代码
void CCopyDataDlg::OnSender()
{
// TODO: Add extra validation here
CString text;
GetDlgItemText(IDC_MSG,text);
if(text.IsEmpty())
return;
CWnd * p = CWnd::FindWindow(NULL,TEXT("Receiver")); //找到程序中运行的Text为Receiver程序
if(p != NULL)//找到
{
COPYDATASTRUCT s;
s.cbData = (text.GetLength() + 1) * sizeof(TCHAR);
s.lpData = (LPVOID)LPCTSTR(text);
p->SendMessage(WM_COPYDATA,/*(WPARAM)GetSafeHwnd()*/ 0,(LPARAM)&s);
}
}