VC 应用间通信,WM_COPYDATA,WM_SETTEXT
来源:互联网 发布:python exit code 9 编辑:程序博客网 时间:2024/06/03 15:59
1、使用 WM_COPYDATA 消息
发送数据的一方:(获得句柄的方法,最简单的方法就是使用FindWindow,找窗口类,或者名,如果你觉得这样不把握,那就利用SetProp个窗口做个记号....见文章“使用信号量找到窗口句柄”)
CString strWindowTitle = _T("ClientDemo"); CString strDataToSend = _T("Hello, Everyone fsdfsdfsdfdsfds,this is a test demo!"); HWND hOtherWnd = ::FindWindow(NULL, strWindowTitle.GetBuffer(0)); if (hOtherWnd != NULL && ::IsWindow(hOtherWnd)) { COPYDATASTRUCT cpd; cpd.dwData = 0; cpd.cbData = strDataToSend.GetLength() * sizeof(TCHAR); cpd.lpData = (void*)strDataToSend.GetBuffer(0); HRESULT hResult = ::SendMessage(hOtherWnd, WM_COPYDATA, (WPARAM)(AfxGetApp()->m_pMainWnd), (LPARAM)&cpd); strDataToSend.ReleaseBuffer(); }
接收数据的一方
ON_WM_COPYDATA()
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
BOOL CClientDemoDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) { if (pCopyDataStruct != NULL) { LPCTSTR pszText = (LPCTSTR)(pCopyDataStruct->lpData); DWORD dwLength = (DWORD)(pCopyDataStruct->cbData); TCHAR szRecvText[1024] = {0}; memcpy(szRecvText, pszText, dwLength); MessageBox(szRecvText, _T("Test"), MB_OK); } return CDialog::OnCopyData(pWnd, pCopyDataStruct); }
2、使用 WM_SETTEXT 消息
发送方:
CString str = _T( "Hello" );HWND hWndReceived = FindWindow( "Receiver", NULL );SendMessage( hWndReceived, WM_SETTEXT, 0, (LPARAM) str );
接受方:
ON_MESSAGE( WM_SETTEXT, OnSetTextMsg )
afx_msg void OnSetTextMsg( WPARAM wParam, LPARAM lParam)OnSetTextMsg( WPARAM wParam, LPARAM lParam ){char str[ 256 ];wsprintf( str, "%s", (char*) lParam );MessageBox(str, _T("Test"), MB_OK);
}3、其他方法,如:
使用内存映射文件
通过共享内存DLL共享内存
进程间发送的内存需为完整的内存,不能在结构体中套结构体,不能让指针等于不完整的内存
COPYDATASTRUCT* pCpd = new COPYDATASTRUCT;pCpd->dwData = 1;pCpd->cbData = sizeof(int) + mBackupDataPath.GetLength()*sizeof(TCHAR);pCpd->lpData = new BYTE[pCpd->cbData]; *((int*)pCpd->lpData) = 1; //设置备份路径 1memcpy((LPVOID)((int*)pCpd->lpData + 1), mBackupDataPath.GetBuffer(0), mBackupDataPath.GetLength()*sizeof(TCHAR));::SendMessage(callInstanceHwnd, WM_COPYDATA, NULL,(LPARAM)pCpd);mBackupDataPath.ReleaseBuffer();delete pCpd->lpData;delete pCpd;
- VC 应用间通信,WM_COPYDATA,WM_SETTEXT
- VC 应用间通信,WM_COPYDATA,WM_SETTEXT
- WM_COPYDATA 进程间通信
- WM_COPYDATA实现进程间通信
- VC++ 中WM_COPYDATA 怎么样应用来实现两个进程间的数据传输
- VC++ 中WM_COPYDATA 怎么样应用来实现两个进程间的数据传输
- 用WM_COPYDATA实现进程间通信
- 利用WM_COPYDATA实现进程间通信
- 关于进程间通信之WM_COPYDATA
- WM_COPYDATA 消息实现进程间通信
- 进程间消息WM_COPYDATA通信示例
- 使用WM_COPYDATA消息完成进程间通信
- WM_COPYDATA 消息实现进程间通信
- 使用WM_COPYDATA消息进程间通信
- WM_COPYDATA 消息实现进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 使用WM_COPYDATA实现进程间通信
- 快速排序
- jqModal点击弹窗外背景不关闭弹窗
- CWnd与HWND的区别与转换
- Exchange 2010 修改队列数据库地址&变更日志路径!
- SQL中JOIN和UNION区别、用法及示例介绍
- VC 应用间通信,WM_COPYDATA,WM_SETTEXT
- 收集统计信息导致索引被监控
- 如何完美的将对话框设置成无边框无标题栏样式?
- VC高版本编译早期代码常见错误...
- Sql Server 2005 中解决死锁的一种方式
- NGUI的显示问题
- 理解和使用Alsa的配置文件
- POJ 1018 滑雪
- sql性能调试-讲解set statistics io 和 set statistics time (转)