有两个程序 A , B ,在 B中想向 A 发送消息及资料 ,让 A 收到后做特定的事 ,请问该如何实做呢?

解决方案 »

  1.   

    有很多种方式, 最简单的是利用WM_COPYDATA消息, 可看MSDN中, Inter-Process Communication
      

  2.   

    http://topic.csdn.net/t/20001218/09/49550.html
      

  3.   

    socket、消息管道、剪贴板、写文件等等
      

  4.   

    简单应用用WM_COPYDATA
    复杂的用内存映像
      

  5.   

    MSDN中列举了以下几种方法:
    Clipboard 
    COM 
    Dynamic Data Exchange (DDE) 
    File Mapping 
    Mailslots 
    Pipes 
    RPC 
    Windows Sockets 
    WM_COPYDATA
      

  6.   

    Windows Sockets 
    WM_COPYDATA
    基本上这两中方式是最好的
      

  7.   

    Clipboard 
    COM 
    Dynamic Data Exchange (DDE) 
    File Mapping 
    Mailslots 
    Pipes 
    RPC 
    Windows Sockets 
    WM_COPYDATA
    全面
      

  8.   

    发送端   
        
    CString   strWindowTitle=_T("接收窗口的标题");   
    CString   strDataToSend     =   _T("Hello");   
                
      LRESULT copyDataResult;   
      CWnd *pOtherWnd=CWnd::FindWindow(NULL,strWindowTitle);   
        
      if(pOtherWnd)   
      {   
      COPYDATASTRUCT cpd;   
      cpd.dwData= 0;   
      cpd.cbData=strDataToSend.GetLength();   
      cpd.lpData =(void*)strDataToSend.GetBuffer(cpd.cbData);   
      copyDataResult=pOtherWnd->SendMessage(WM_COPYDATA,(WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(),(LPARAM)&cpd);   
     strDataToSend.ReleaseBuffer();      
      }     
      else     
      {   
      AfxMessageBox("Unable   to   find   other   app.");   
      }   
      }   
        
      接收端:   
        
      //消息映射函数 
      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);     
      AfxMessageBox(strRecievedText);   
      return   CMyWnd::OnCopyData(pWnd,   pCopyDataStruct);   
      }