【WM_COPYDATA】进程通信——WM_COPYDATA消息

8 篇文章 0 订阅


WM_COPYDATA消息



对Sever端的Send按钮做如下操作:


 void CSeverDlg::OnButtonClickSend()
{
    COPYDATASTRUCT cCopyData;
    cCopyData.cbData = m_Input.GetWindowTextLength();
    CString Tmp;
    m_Input.GetWindowText(Tmp);
    cCopyData.lpData = Tmp.GetBuffer(0);
    cCopyData.dwData = 0;


    //use a event to make sure data have been sended


    //Find the target window
    HWND hDestWnd = (HWND)::FindWindow(NULL, "My-Client");
    //Send WM_COPYDATA message to transmit infomation
    ::SendMessageTimeout(hDestWnd,          //目标窗口
                        WM_COPYDATA,        //消息
                        (WPARAM)AfxGetMainWnd()->m_hWnd,    //发送消息的窗口 
                        (LPARAM)&cCopyData,     //COPYDATASTRUCT结构 
                        SMTO_ABORTIFHUNG,       //超时立即返回
                        1000,                   //超时一秒
                        NULL);
    //::SendMessage(hDestWnd, WM_COPYDATA, (WPARAM)(AfxGetApp()->m_pMainWnd), (LPARAM)&cCopyData);
    DWORD dwError = GetLastError();
    CloseHandle(hDestWnd);
}



我在这里卡了半天,原因是::命名空间作用域域符没有加,导致使用了CWin类的FindWindow()成员函数,得到的是CWnd对象,强制转为HWND之后就捕捉到了1400:无效的窗口句柄。 …………很明显,一个是对象,一个是句柄,完全两码事……

COPYDATASTRUCT结构体定义:
typedef struct tagCOPYDATASTRUCT{
DWORDdwData;//自定义的行动代码
DWORDcbData;//lpData内容的大小
PVOIDlpData;//指向共享的数据指针
};

Client端:

//对OnCopyData函数进行重载即可
BOOL CClientDlg::OnCopyData(CWnd *pWnd, COPYDATASTRUCT* cds)
{

	if (cds->cbData)
	{
		m_Input.SetWindowText((LPCTSTR)cds->lpData);
	}

	return CDialog::OnCopyData(pWnd,cds);
}





很喜欢编程,喜欢深入了解一切的实现,作为新人,希望前辈们多多指正,多多鼓励,谢谢。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值