通过以下代码:
// 发送一个数据到达目标窗口
HWND hwndFrom,hwndTo; //hwndTo=::FindWindow(0,LPCSTR(m_comboWT));
CWnd *pWnd=FindWindow(0,LPCSTR(m_sendWT));
if(!hwndTo){
AfxMessageBox("没有找到目标窗口");
return ;
}
hwndFrom = AfxGetMainWnd()->m_hWnd; //::PostMessage(hwndTo,WM_COPYDATA,(unsigned int)hwndFrom,'1');
pWnd->SendMessage(WM_COPYDATA,(unsigned int)hwndFrom,'1');/////////////////////////////
接受方:BOOL CVirCommDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
{
// TODO: Add your message handler code here and/or call default
char ch;
ch = (char)pCopyDataStruct;
m_receiveData += ch;
UpdateData(FALSE);

return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}同一个进程可以相应这个消息,但是不同的进程就不能接受到。
代码是一样的,运行两个实例。
请高手指点,为何?

解决方案 »

  1.   

    第二个参数必须指向一个COPYDATASTRUCT结构,即使没有数据需要传,也必须指向COPYDATASTRUCT结构,结构中的cbData可以指定为0。否则是收不到消息的!
      

  2.   

    to idAnts(你才无聊呢) :
    为什么访问自己的窗体可以?(一个实例,查找自己的窗口)关于你说的,我去看看,谢谢!!!
      

  3.   

    该问题已经解决,非常感谢。void CVirCommDlg::OnButton2() 
    {
    UpdateData(); COPYDATASTRUCT cds;
    cds.dwData = '1';
    cds.lpData = NULL;
    cds.cbData = 0;
    // 发送一个数据到达目标窗口
    HWND hwndFrom,hwndTo; //CWnd *pWnd=FindWindow(0,LPCSTR(m_sendWT));
    hwndTo = ::FindWindow(0,LPCSTR(m_sendWT)); if(!hwndTo){
    AfxMessageBox("没有找到目标窗口");
    return ;
    }
    hwndFrom = AfxGetMainWnd()->m_hWnd; ::SendMessage(hwndTo,WM_COPYDATA,(unsigned int)hwndFrom,(LPARAM) &cds);
    //pWnd->SendMessage(WM_COPYDATA,(unsigned int)hwndFrom,(LPARAM) &cds);
    }BOOL CVirCommDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
    {
    // TODO: Add your message handler code here and/or call default
    COPYDATASTRUCT *p;
    p = pCopyDataStruct; m_receiveData += p->dwData;
    UpdateData(FALSE);

    return CDialog::OnCopyData(pWnd, pCopyDataStruct);
    }