进程间通信的WM_COPYDATA的使用

http://blog.csdn.net/ao929929fei/article/details/6316174

接收数据的一方

ON_WM_COPYDATA()

afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);

代码片段:

[cpp] view plaincopy
 
  1. BOOL CClientDemoDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)  
  2. {  
  3.     if (pCopyDataStruct != NULL)  
  4.     {  
  5.         LPCTSTR pszText = (LPCTSTR)(pCopyDataStruct->lpData);  
  6.         DWORD dwLength = (DWORD)(pCopyDataStruct->cbData);  
  7.         TCHAR szRecvText[1024] = {0};  
  8.         memcpy(szRecvText, pszText, dwLength);  
  9.         MessageBox(szRecvText, _T("Test"), MB_OK);  
  10.     }  
  11.   
  12.     return CDialog::OnCopyData(pWnd, pCopyDataStruct);  
  13. }  

发送数据的一方

代码片段:

[cpp] view plaincopy
 
  1. CString strWindowTitle =  _T("ClientDemo");  
  2.     CString strDataToSend = _T("Hello, Everyone fsdfsdfsdfdsfds,this is a test demo!");  
  3.   
  4.     HWND hOtherWnd = ::FindWindow(NULL, strWindowTitle.GetBuffer(0));  
  5.     if (hOtherWnd != NULL && ::IsWindow(hOtherWnd))  
  6.     {  
  7.         COPYDATASTRUCT cpd;  
  8.         cpd.dwData = 0;  
  9.         cpd.cbData = strDataToSend.GetLength() * sizeof(TCHAR);  
  10.         cpd.lpData = (void*)strDataToSend.GetBuffer(0);  
  11.         HRESULT hResult = ::SendMessage(hOtherWnd, WM_COPYDATA, (WPARAM)(AfxGetApp()->m_pMainWnd), (LPARAM)&cpd);  
  12.         strDataToSend.ReleaseBuffer();  
  13.     }  

OK了,就这么简单

WM_COPYDATA消息主要目的是允许在进程间传递少量只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。

原文地址:https://www.cnblogs.com/kex1n/p/3198686.html