不同进程间消息传递可通过注册Windows消息和用户自定义消息实现:
一. 注册Windows消息方式
1、定义消息
2、接收方消息映射
3、接收方消息处理
4、发送方消息发送
不同进程间消息传递参数仅能传递简单参数,如整型数据等,诸如字符串、结构体复杂类型的数据,无法进行传递,因为两个进程使用不同的虚拟内存,所以数据无法传递,关于不同进程间数据传递问题,请参考转载的文章,大神给出详细解释http://blog.youkuaiyun.com/slj_win/article/details/40795159。
二、 用户自定义消息方式
按照用户自定义消息流程,接收方和发送方采用相同的消息值。
个人水平有限,不足之处请批评指正,欢迎交流。
一. 注册Windows消息方式
1、定义消息
const UINT WM_MESSAGE_PROCESS = ::RegisterWindowMessage(_T("Message_Process")); // 接收方
const UINT WM_MESSAGE_PROCESS = ::RegisterWindowMessage(_T("Message_Process")); // 发送方
2、接收方消息映射
afx_msg LRESULT OnProcessMsg(WPARAM wparam, LPARAM lparam);
ON_REGISTERED_MESSAGE(WM_MESSAGE_PROCESS,OnProcessMsg)
3、接收方消息处理
LRESULT CSunjianDlgTestDlg::OnProcessMsg(WPARAM wparam, LPARAM lparam)
{
if( 1 == wparam )
{
CString strString = _T("接收到远程进程消息");
MessageBox(strString);
}
return 0;
}
4、发送方消息发送
HWND hWnd = NULL;
hWnd = ::FindWindow(NULL,_T("SunjianDlgTest"));
::PostMessage(hWnd,WM_MESSAGE_PROCESS,1,2);
不同进程间消息传递参数仅能传递简单参数,如整型数据等,诸如字符串、结构体复杂类型的数据,无法进行传递,因为两个进程使用不同的虚拟内存,所以数据无法传递,关于不同进程间数据传递问题,请参考转载的文章,大神给出详细解释http://blog.youkuaiyun.com/slj_win/article/details/40795159。
二、 用户自定义消息方式
按照用户自定义消息流程,接收方和发送方采用相同的消息值。
#define WM_USER_PROCESS WM_USER+1
个人水平有限,不足之处请批评指正,欢迎交流。