新手求救,进程间通信问题. A.exe 发送消息到 B.exe 应该怎么样实现,具体的实现方法是什么,希望能给出源码.在线等待,谢谢大家. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 多着呢,可以用SOCKET,可以用内核对象,可以注册消息,可以用文件。太多了。最简单的用注册消息。。你查下RegisterWindowMessage,这个API函数2个程序都用这个API注册同一个字符串,它会返回一个唯一的消息ID,直接用这个消息ID,就像自定义消息一样使用就可以了。。 方式1:发送窗口消息(如果进程有窗口的话)方式2:命名管道方式3:共享内存方式4:socket通信方式5:…… 通过发送WM_COPYDATA消息来传输只读数据 //要发送的原始数据 CString str; str.Format(_T("利用消息发送数据:1A")); //转换成COPYDATASTRUCT结构 COPYDATASTRUCT m_copyDATA; //COPYDATA结构 m_copyDATA.cbData = str.GetLength(); //str.GetLength()的值是16 m_copyDATA.lpData = str.GetBuffer(0); //取指针 //发送消息 CWnd *pWndPrev; if (pWndPrev = CWnd::FindWindow(NULL, _T("VC受控方"))) //根据窗口名查找句柄 { ::SendMessage(pWndPrev->m_hWnd, WM_COPYDATA, NULL, (LPARAM)&m_copyDATA); }接收数据一方在OnCopyData中的代码: /* 如果是在系统消息中拦截,应该这样转换数据 COPYDATASTRUCT *pCopyDataStruct = NULL ; pCopyDataStruct = (COPYDATASTRUCT*)lParam; */ CString strTemp; memcpy(strTemp.GetBuffer(pCopyDataStruct->cbData+1), pCopyDataStruct->lpData, pCopyDataStruct->cbData); m_edit1.SetWindowText(strTemp); //将收到的字符串显示在文本框中 return CDialog::OnCopyData(pWnd, pCopyDataStruct); 我创建了两个工程,分别是两个对话框,一个是SendmsgDlg,一个是RecvmsgDlg,现在要将SendmsgDlg 中的数据PostMessage到RecvmsgDlg中,如果用WM_COPYDATA的方法的话,是不是就可以不用声明消息了,直接在SendmsgDlg和RecvmsgDlg中输入dlyme(丈夫三十功未立) 的以上代码就可以了吗?如果是的话 ,在编译的时候系统提示 m_edit1 变量未定义,那么 m_edit1 应该定义成谁的成员变量呢? m_edit1在原来的代码里是个静态文本框,不用理它,屏蔽就可以。 编译通过,但是程序没响应,dlyme (丈夫三十功未立)你能把你的整个工程发给我看看吗?感激不尽! if (pWndPrev = CWnd::FindWindow(NULL, _T("VC受控方"))) //根据窗口名查找句柄没有响应是由于窗体名称不是这个"VC受控方"吧。源码已经发给你了,里面还有进程间通信其它方式的实现。 我也需要一个看看 dlyme (丈夫三十功未立)你能把你的整个工程发给我看看吗? 无论将菜单项映射到哪个类都不能用 c++对话框上的控件如何实现双缓冲?(100分) 急 刚用MFC 出现的问题 打印一段文本到A4纸上,在不同的打印机上要求都打印到相同的位置,我是这么想的,不知道对不对? 一个非常奇怪的ProgressBar的问题,请有经验的人指点一下 怎样关联?? 关于VC创建数据库 ReadProcessMemory 函数的第二个参数,应该传递什么 如何将一个应用窗口最小化后显示于windows任务栏的右下角? VC ++ 7.0中还有MFC么??? CSplitterWnd 分割窗口 基于CFormView 类弹出断言失败错误 如何修改一个文件的最后修改日期?
太多了。
最简单的用注册消息。。
你查下RegisterWindowMessage,这个API函数
2个程序都用这个API注册同一个字符串,它会返回一个唯一的消息ID,直接用这个消息ID,就像自定义消息一样使用就可以了。。
CString str;
str.Format(_T("利用消息发送数据:1A")); //转换成COPYDATASTRUCT结构
COPYDATASTRUCT m_copyDATA; //COPYDATA结构
m_copyDATA.cbData = str.GetLength(); //str.GetLength()的值是16
m_copyDATA.lpData = str.GetBuffer(0); //取指针 //发送消息
CWnd *pWndPrev;
if (pWndPrev = CWnd::FindWindow(NULL, _T("VC受控方"))) //根据窗口名查找句柄
{
::SendMessage(pWndPrev->m_hWnd, WM_COPYDATA, NULL, (LPARAM)&m_copyDATA);
}接收数据一方在OnCopyData中的代码: /*
如果是在系统消息中拦截,应该这样转换数据
COPYDATASTRUCT *pCopyDataStruct = NULL ;
pCopyDataStruct = (COPYDATASTRUCT*)lParam;
*/ CString strTemp;
memcpy(strTemp.GetBuffer(pCopyDataStruct->cbData+1),
pCopyDataStruct->lpData,
pCopyDataStruct->cbData);
m_edit1.SetWindowText(strTemp); //将收到的字符串显示在文本框中 return CDialog::OnCopyData(pWnd, pCopyDataStruct);
RecvmsgDlg中,如果用WM_COPYDATA的方法的话,是不是就可以不用声明消息了,直接在SendmsgDlg和RecvmsgDlg中输入dlyme(丈夫三十功未立) 的以上代码就可以了吗?如果是的话 ,在编译的时候系统提示 m_edit1 变量未定义,那么 m_edit1 应该定义成谁的成员变量呢?
没有响应是由于窗体名称不是这个"VC受控方"吧。源码已经发给你了,里面还有进程间通信其它方式的实现。
dlyme (丈夫三十功未立)你能把你的整个工程发给我看看吗?