win32 跨进程的消息传递

最近写项目有一个需求,就是网页启动咱们的客户端,并进行传参;

这其中,直接掉起客户端,只要注册一个类似http://的协议就行了;

但是这对于已经启动的客户端是无效的.所以向导了跨进程调用;

第一步:找到需要发送的窗口(我是通过窗口名字找的),之后通过跨进程数据传递所用的拷贝结构体写入数据,并通过SendMessage发送数据,这个是消息同步的

HWND hWnd = FindWindowA(NULL, "ConnectAA");
	if (::IsWindow(hWnd))
	{
		std::string str = "message send test";
		//delete str;
		LRESULT copyDataResult;
		int size = sizeof(str);
		int length = str.length();
		COPYDATASTRUCT cpd;
		cpd.dwData = 0;
		cpd.cbData = length+1;			 //data length
		cpd.lpData = &str[0]; //data buffer
		copyDataResult = ::SendMessage(hWnd,WM_COPYDATA, NULL, (LPARAM)&cpd);
		return 0;
	}

第二步:接收数据(我使用的是SOUI2的框架)

所以;连接消息和响应函数的是:

MESSAGE_HANDLER(WM_COPYDATA, OnSend)

第三步:响应函数就是

LRESULT CMainDlg::OnSend(UINT uMsg, WPARAM wp, LPARAM lp, BOOL & bHandled)
{
	COPYDATASTRUCT* pCDS = (COPYDATASTRUCT*)lp;
	SWindow* textMsg = FindChildByName(L"textMsg");
	if (textMsg)
	{
		const int size = pCDS->cbData;
		if (pCDS)
		{
			LPCSTR str = (LPCSTR)pCDS->lpData;
			//SStringT* str = (SStringT*)pCDS->lpData;
			textMsg->SetWindowTextW(S_CA2T(str));

		}

	}
	return LRESULT();
}

界面测试消息是正常发送的!!!不会出现乱码;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值