在线咨询
有事点这里
有事点这里
看不懂这篇文章?联系我们
("麦洛克菲"长期致力于内核安全的推广与普及,我们更专业!)
求职QQ群:223902435。讨论各种求职笔试面试问题
作者:admin 时间:2015-10-31
标题:消息队列机制

消息是Windows操作系统提供的一种驱动机制。利用消息进行进程通信,就是使用消息激活某种操作的过程。对于进程间的通信,一般采用用户自定义的消息(WM_USER+X)来完成,也可以使用Windows定义的WM_COPYDATA消息来共享数据。

 

数据发送。在数据发送进程中,调用FindWindow()函数根据窗口的标题或者接收窗体的类名搜索窗口,然后给COPYDATASTRUCT结构赋值,最后调用SendMessage()函数发送消息。实现了两个对话框窗口类(CSendDlgCRecieveDlg),一个用于接受数据消息,一个用于发送数据消息。具体代码如下:

 

void CSendDlg::OnSend()

{

  UpdateData(TRUE);

  CWnd *pWnd = CWnd::FindWindow(NULL, _T("Recieve")); //查找DataRecv进程

  if(pWnd==NULL)

  {

      MessageBox(_T("寻找接收窗口失败!"));

      return;

  }

  COPYDATASTRUCT cpd; //COPYDATASTRUCT结构赋值

  cpd.dwData = 0;

  cpd.cbData = m_send.GetLength();

  cpd.lpData = (void*)m_send.GetBuffer(cpd.cbData);

  pWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&cpd); //发送

}

 

数据接收。实现数据接收的代码如下:

 

BOOL CRecieveDlg::OnCopyData(CWnd* pWnd COPYDATASTRUCT* pCopyDataStruct)

{

  m_strrecieve = (LPSTR)pCopyDataStruct->lpData;

  m_strrecieve = m_recieve.Left(pCopyDataStruct->cbData); //获得实际长度字符串

  UpdateData(FALSE); //更新数据

  return CDialog::OnCopyData(pWnd, pCopyDataStruct);

}