最近写项目有一个需求,就是网页启动咱们的客户端,并进行传参;
这其中,直接掉起客户端,只要注册一个类似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();
}
界面测试消息是正常发送的!!!不会出现乱码;