我打算用wm_copydata在进程间(不是进程的不同实例)传递消息
但是,调试的时候
我在发送进程中发送消息后(消息的确发出了),接收进程却没有反映
发送进程是dll,
接收进程是一个对话窗口另外在dll里用什么函数获得当前窗口的句柄?

解决方案 »

  1.   

    如果你的对话框有确定的标题,用FindWindow试试
      

  2.   

    是在dll里发送消息的,
    wm_copydata需要发送窗口的句柄
    但是如果调用dll的进程恰好没有窗口,是不是就调用不成功?
      

  3.   

    接收进程是一个对话窗口,你要给它发送数据,得到它的窗口句柄就可以了。跟调用Dll的进程没关系
      

  4.   

    使用WM_COPYDATA:CString str = _T( "Hello" );
    HWND hWndReceived = FindWindow( "Receiver", NULL );COPYDATASTRUCT cpd;
    cpd.dwData = 0;
    cpd.cbData = strDataToSend.GetLength()+10;
    cpd.pData = (void*)str.GetBuffer(cpd.cbData);SendMessage( hWndReceived, WM_COPYDATA, 0, (LPARAM) & cpd );
    str.ReleaseBuffer();加入映射宏:BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
    //{{AFX_MSG_MAP(CMyWnd)
    ...
    ON_WM_COPYDATA()
    ...
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()...映射函数:BOOL CMyWnd::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
    {
       CString strRecievedText = (LPCSTR) (pCopyDataStruct->lpData);
       return CMyWnd::OnCopyData(pWnd, pCopyDataStruct);
    }