如何实现两个对话框应用程序通信?

sunlau29 2010-01-11 04:24:54
分别建立两个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,但是另外一个对话框没反应。
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunlau29 2010-01-11
  • 打赏
  • 举报
回复
找到原因了,就是SendMessage的时候,参数设为 SendMessage(hwnd,0,0)导致不成功的
lllyyy2403 2010-01-11
  • 打赏
  • 举报
回复
两个进程间通信有很多方法,有内存映射实现通信,也可以发送消息实现通信,但是发送消息的方式必须采用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);
}
shenyi0106 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sandyandy 的回复:]
1. 使用消息
2. 管道
3. 邮糟
4. tcp/ip
等等
[/Quote]
1.使用消息 要传数据的话,必须使用WM_COPY消息,或者通过内存映射文件,事件等内核对象来完成
sandyandy 2010-01-11
  • 打赏
  • 举报
回复
1. 使用消息
2. 管道
3. 邮糟
4. tcp/ip
等等
哈利路亚1874 2010-01-11
  • 打赏
  • 举报
回复
你另外一个程序中的消息响应函数也贴出来,看看有没有声明定义错误;
还可以可以使用内存映射,管道等

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧