欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MFC-进程间消息传递

程序员文章站 2022-07-14 20:37:15
...

在涉及到将一个进程的信息发送到另一个进程的消息,并让另一个进行消息处理,通常需要涉及到进程间通讯。

  1. 分别在两个进程间定义消息;
  2. 在要接受的进程间定义消息映射;
  3. 在发送消息的进程进行消息触发;

在进行发送消息的进程首先获取到接受进程的句柄,通过定义的消息进行发送消息,在接受进程定义对应的消息映射;

在发送进程定义消息:
#define MESS_1 WM_USER + 111
#define MESS_2 WM_USER + 112
#define MESS_3 WM_USER + 113
#define MESS_4 WM_USER + 114
#define MESS_5 WM_USER + 115
#define MESS_6 WM_USER + 116
#define MESS_7 WM_USER + 117

在发送进程获取接受进程的句柄:

HWND m_hAdaptorWnd = NULL;
CString strfilename(buf); 
strfilename.Append( _T("Driver\\HM_UDMGenTest.exe"));
WinExec(strfilename,SW_HIDE);

CString  str = _T("打标软件DEMO"); //要查找的窗体名称
m_hAdaptorWnd = FindWindow(NULL,str);
ShowWindow(m_hAdaptorWnd,SW_HIDE);
if(!m_hAdaptorWnd)
{ 
		CDebug::ShowDetailMessage("HM_UDMGenTest do not start!");
}

在发送进程进行消息传递:

	::SendMessage(m_hAdaptorWnd,MESS_1,(WPARAM)0,(LPARAM)0);
	::SendMessage(m_hAdaptorWnd,MESS_2,(WPARAM)0,(LPARAM)0);
	::SendMessage(m_hAdaptorWnd,MESS_3,(WPARAM)0,(LPARAM)0);
	::SendMessage(m_hAdaptorWnd,MESS_4,(WPARAM)0,(LPARAM)0);
	::SendMessage(m_hAdaptorWnd,MESS_5,(WPARAM)0,(LPARAM)0);
	::SendMessage(m_hAdaptorWnd,MESS_6,(WPARAM)0,(LPARAM)0);
	::SendMessage(m_hAdaptorWnd,MESS_7,(WPARAM)0,(LPARAM)0);

在接受进程中定义进程:

#define MESS_1		    WM_USER + 111
#define MESS_2	        WM_USER + 112
#define MESS_3			WM_USER + 113
#define MESS_4			WM_USER + 114
#define MESS_5			WM_USER + 115
#define MESS_6			WM_USER + 116
#define MESS_7			WM_USER + 117

在接受进程中定义消息映射:

在头文件中定义进行声明:
DECLARE_MESSAGE_MAP()
XXX1
XXX2
XXX3
XXX4
XXX5
XXX6
XXX7
在对应的.cpp文件实现:

BEGIN_MESSAGE_MAP(ClassName,BasedName)
	ON_MESSAGE(MESS_1,XXX1)
	ON_MESSAGE(MESS_2,XXX2)
	ON_MESSAGE(MESS_3,XXX3)
	ON_MESSAGE(MESS_4,XXX4)
	ON_MESSAGE(MESS_5,XXX5)
	ON_MESSAGE(MESS_6,XXX6)
	ON_MESSAGE(MESS_7,XXX7)
END_MESS_MAP	

在接受消息进程中处理相应的映射函数:

	XXX1()
	XXX2()
	XXX3()
	XXX4()
	XXX5()
	XXX6()
	XXX7()
相关标签: 消息传递