发送WM_COPYDATA消息实现进程间的通信

mark一下

结构体

struct Info{
	TCHAR g_strFileType[MAX_PATH];
	bool bStop;
};


 

这是发送端的进程

	HWND hWndRcv=::FindWindow(NULL,_T("RECV COPY DATA"));
	if(hWndRcv==NULL)
	{
		::AfxMessageBox(_T("Not Found Window"));
		((CButton*)(GetDlgItem( IDC_CHECK1 )))->SetCheck(0) ; //IDC_CHECK is ID for control

		return;
	}
	UpdateData(true);

	Info *m_info;
	m_info = new Info();
	_tcscpy(m_info->g_strFileType,m_Filetype.GetBuffer(m_Filetype.GetLength()*2+2));


	int checkState1 = IsDlgButtonChecked(IDC_CHECK1);

	if (BST_CHECKED==checkState1)
	{
		m_info->bStop = true;
	}
	else
	{
		m_info->bStop = false;
	}

	COPYDATASTRUCT cpd;
	cpd.dwData=1;
	cpd.cbData=sizeof(Info);
	cpd.lpData=(PVOID)m_info;
	::SendMessage(hWndRcv,WM_COPYDATA,(WPARAM)this->m_hWnd,(LPARAM)&cpd);
	UpdateData(FALSE);

	::AfxMessageBox(_T("send sucess!"));


 

接受的进程

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM   
						  lParam)  
{  
	switch(message)  
	{  
	case WM_DESTROY:  
		PostQuitMessage(0);  
	case WM_COPYDATA:
		OutputDebugString(_T("CopyData"));

		// 当收到WM_COPYDATA消息时,从lParam中提取出        
		// COPYDATASTRUCT     
		PCOPYDATASTRUCT lpcds = (PCOPYDATASTRUCT)lParam;
	       
		if (lpcds->dwData==1)
		{
			
			Info *info = (Info*)(lpcds->lpData);

			OutputDebugString(info->g_strFileType);

			_tcscpy(g_info.g_strFileType,info->g_strFileType);
			g_info.bStop = info->bStop;
			
		}

		return 0;  
	}  
	return DefWindowProc(hwnd, message, wParam, lParam);  
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值