分别建立两个MFC对话框应用程序,想实现他们之间通信,怎么做?
我尝试过使用Process32First(hSnapShot,&pEntry);   
    
  //Iterate   thru   all   processes   
while(1)   
{   

    BOOL Res=Process32Next(hSnapShot,&pEntry);       if(Res==FALSE)
    {
break;
    }
    
    if(wcscmp(pEntry.szExeFile,TEXT("Dlg2.exe")) == 0)
     {
::EnumWindows(lpEnumFunc,pEntry.th32ProcessID);
     }}然后在lpEnumFunc回调函数中,使用传入的hwnd调用SendMessage,但是另外一个对话框没反应。

解决方案 »

  1.   

    1. 使用消息
    2. 管道
    3. 邮糟
    4. tcp/ip
    等等
      

  2.   

    1.使用消息  要传数据的话,必须使用WM_COPY消息,或者通过内存映射文件,事件等内核对象来完成
      

  3.   

    两个进程间通信有很多方法,有内存映射实现通信,也可以发送消息实现通信,但是发送消息的方式必须采用WM_COPYDATA消息才能进行数据传递,还可以利用剪切板进行通信等等。下面以WM_COPYDATA为例:
    void CDataMsgMainDlg::OnSend()
    {
    HWND hwnd=::FindWindow(NULL,"DataMsgClient");
    if(hwnd!=NULL)
    {
      CString msgedit;
      GetDlgItem(IDC_EDIT1)->GetWindowText(msgedit);
      COPYDATASTRUCT data={0};
      data.dwData=(DWORD)this->GetSafeHwnd();
      data.cbData=msgedit.GetLength();
      data.lpData=msgedit.GetBuffer(msgedit.GetLength());
      ::SendMessage(hwnd,WM_COPYDATA,(WPARAM)this->GetSafeHwnd(),(LPARAM)&data);
    }
    //接受消息程序
    BOOL CDataMsgClientDlg::OnCopyData(WWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
    {
    char masgdata[256];
    DWORD size=pCopyDataStruct->cbData;
    CopyMemory(msgdata,pCopyDataStruct->lpData,size);
    msgdata[size]='\0';
    GetDlgItem(IDC_EDIT1)->SetWindowText(msgdata);
    return CDialog::OnCopyData(pWnd,pCopyDataStruct);
    }
      

  4.   

    找到原因了,就是SendMessage的时候,参数设为 SendMessage(hwnd,0,0)导致不成功的