VC进程间通信方法之一
2013-02-21 14:05
232 查看
编写的一个监控程序,需要监视另外一个程序的运行状况
参考了:http://blog.csdn.net/mail_cm/article/details/7902904
之中的WM_COPYDATA方式,只是把过程详细了一下,同时改正了里面的一些不兼容的问题
首先创建一个对话框程序-基于对话框-项目名DataSend
添加一个Edit控件,并为这个控件添加一个CString类型的成员变量m_strCopyData
添加一个Button控件,并编写响应函数如下:(这个按钮的ID设置为:IDC_BUTTON_Send)
这里尤其要注意cpd.cbData的字符长度的那句话,一方面要+1,另一方面要*sizeof(TCHAR)
这样才能在unicode字符集下正常使用
然后创建另一个对话框程序-基于对话框-项目名DataRecv
一方面要在这个项目的DataRecvDlg.cpp文件中的消息映射段增加一个响应函数:
并将这个函数在cpp中定义:
// 手动增加的函数
BOOL CDataRecvDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
m_strRecvData = (LPTSTR)(pCopyDataStruct->lpData);
// 获得实际长度的字符串
m_strRecvData = m_strRecvData.Left(pCopyDataStruct->cbData);
// 更新数据
UpdateData(FALSE);
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}其中m_strRecvData这个成员变量属于向这个对话框中添加的Edit控件!
这样,二者之间就能够实现正常通信了
参考了:http://blog.csdn.net/mail_cm/article/details/7902904
之中的WM_COPYDATA方式,只是把过程详细了一下,同时改正了里面的一些不兼容的问题
首先创建一个对话框程序-基于对话框-项目名DataSend
添加一个Edit控件,并为这个控件添加一个CString类型的成员变量m_strCopyData
添加一个Button控件,并编写响应函数如下:(这个按钮的ID设置为:IDC_BUTTON_Send)
void CDataSendDlg::OnBnClickedButtonSend() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); // 更新数据 CWnd *pWnd=CWnd::FindWindow(NULL,_T("DataRecv")); // 查找DataRecv进程 if(pWnd==NULL){ MessageBox(_T("Unable to find DataRecv.")); return; } COPYDATASTRUCT cpd; // 给COPYDATASTRUCT结构赋值 cpd.dwData = 0; cpd.cbData = (m_strCopyData.GetLength()+1) * sizeof(TCHAR); cpd.lpData = (void*)m_strCopyData.GetBuffer(cpd.cbData); pWnd->SendMessage(WM_COPYDATA,NULL,(LPARAM)&cpd); // 发送 }
这里尤其要注意cpd.cbData的字符长度的那句话,一方面要+1,另一方面要*sizeof(TCHAR)
这样才能在unicode字符集下正常使用
然后创建另一个对话框程序-基于对话框-项目名DataRecv
一方面要在这个项目的DataRecvDlg.cpp文件中的消息映射段增加一个响应函数:
BEGIN_MESSAGE_MAP(CDataRecvDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_COPYDATA()//这个是我们增加的 //}}AFX_MSG_MAP END_MESSAGE_MAP()其次要在头文件中增加一个声明:
BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
并将这个函数在cpp中定义:
// 手动增加的函数
BOOL CDataRecvDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
m_strRecvData = (LPTSTR)(pCopyDataStruct->lpData);
// 获得实际长度的字符串
m_strRecvData = m_strRecvData.Left(pCopyDataStruct->cbData);
// 更新数据
UpdateData(FALSE);
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}其中m_strRecvData这个成员变量属于向这个对话框中添加的Edit控件!
这样,二者之间就能够实现正常通信了
相关文章推荐
- VC++进程间通信的十一种方法
- VC++中进程间通信的十一种方法
- VC/MFC 进程间通信方法总结
- VC++进程间通信的十一种方法
- VC++ 进程间通信方法总结
- Win32应用程序中进程间通信方法分析与比较
- VC++ 8.0 (2008) 作 office12 msword 二次开发的头文件修改方法
- VC中创建分割条的方法。
- windows进程间通信的4种基本方法
- VC环境下,插入汇编文件到项目的方法
- VC 回调函数及使用方法
- VC 中任意扩展对话框的方法(主要是针对向左或向上)
- VC++环境下利用管道和线程实现进程间通信
- VC工具使用和调试方法
- VB和VC格式化代码的一些方法,记录一下,不记老忘记
- 孙鑫VC学习笔记:第十一讲 (二) 图形的保存与重绘方法
- VC整合环境下,插入汇编文件到项目的方法
- VC WinExec打开指定程序或者文件的方法
- VC中改变对话框背景色的多种方法
- 在microsoft vc++ 2008版中运行李先静先生一书及数据结构高一凡先生一书实例的方法