Windows程序和消息机制(三):消息与进程间通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tutucoo/article/details/84503405

自定义消息与进程间通信

窗口程序可以接收自定义的消息类型,前提是通信的进程声明了这种消息类型,声明的方法很简单,WM_USER加一个值就可以了,一般加的值从0x400开始,其他的值已经被系统使用了。

实现一个完整的自定义消息需要进行以下步骤:

1.声明自定义消息类型:

  WM_UMSG+0x400

2.添加消息映射:

  BEGIN_MESSAGE_MAP(CUserWMDlg,CDialog)
  …
  ON_MESSAGE(WM_UMSG,RevcMsg)
  …
  END_MESSAGE_MAP()

3.实现自定义响应函数:

  VOID
  CUserWMDlg::RecvMsg(WPARAM wParam,LPARAM lParam)
  {
  …
  }

WM_COPYDATA与进程间通信

这种通信方式跟自定义消息类似,只不过它是系统定义的。由于使用SendMessage()函数在发送消息时的阻塞机制,传递的消息不宜过多。

SendMessage((HWND)hWnd,WM_COPYDATA,(WPARAM)wParam,(LPARAM)lParam);

第一个参数是接收消息的窗口句柄,第二个参数填上WM_COPYDATA,第三个参数是发送消息的窗口句柄,可以为空,第四个参数需要传递下面的结构体:

typedef  struct tagCOPYDATASTRUCT{  
	ULONG_PTR dwData;// 自定义的数据,一般为0
	DWORD cbData;// lpData指向的数据大小 
	PVOID lpData;// 指向数据的指针
	}COPYDATASTRUCT,*PCOPYDATASTRUCT;  

如果是MFC程序,直接在要进行通信的窗口中添加WM_COPYDATA消息,程序会自动生成WM_COPYDATA发送消息所需要的一切。

猜你喜欢

转载自blog.csdn.net/tutucoo/article/details/84503405
今日推荐