DLL全局钩子和外部进程之间通讯的问题。

liuhaochuan 2002-11-13 09:35:00
这是我钩子DLL中向外部进程传递消息的函数,当钩子被注入后这段会被执行,但接收消息的进程收不到它发出的消息。 后来我测试把这个函数放在一个MFC EXE中,就可以用。 请问在DLL中发消息是不是有什么限制,或者我哪里做错了。谢谢各位指教!
BOOL SendIpcMsg()
{
//CWnd *pWnd=CWnd::FindWindow(NULL,"Receiver");
CString strWindowTitle = _T("Receiver");
CString strDataToSend = _T("This is a message to send");

LRESULT copyDataResult;
CWnd *pOtherWnd = CWnd::FindWindow(NULL, strWindowTitle);

if (pOtherWnd)
{
COPYDATASTRUCT cpd;
cpd.dwData = 0;
cpd.cbData = strDataToSend.GetLength();
cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData);
copyDataResult = pOtherWnd->SendMessage(WM_COPYDATA,
(WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(),
(LPARAM)&cpd);
strDataToSend.ReleaseBuffer();
// copyDataResult has value returned by other app

}
else
{
AfxMessageBox("Unable to find other app.");
}
return FALSE;
}
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2002-11-14
  • 打赏
  • 举报
回复
icelight(icelight) ,WM_COPYDATA不能用PostMessage的。
另外,楼上说得也许有道理。
tuyang 2002-11-14
  • 打赏
  • 举报
回复
我猜是WM_COPYDATA消息有问题。当在同一个进程的时候,此消息时可以完全被操作的。但是,此消息在多进程的环境下会出问题。我记得在哪篇文章中说道,MS为了安全性,至少在XP中提高了对此类消息的控制,不允许在多进程中发送WM_COPYDATA的消息。好像还包括WM_GETTEXT等。不过我具体的没有试验过。
icelight 2002-11-14
  • 打赏
  • 举报
回复
我遇过这样的问题,在DLL中PostMessage()给别的进程没问题,SendMessage()时对方收不到。

你试试用PostMessage()行不行。记得处理同步。
icelight 2002-11-14
  • 打赏
  • 举报
回复
我没有特别指哪一个消息。
我没留意到楼主在说WM_COPYDATA,不好意思。

我是在用LPARAM传一个字符串指针时遇到类似情况。
bu_zheng 2002-11-13
  • 打赏
  • 举报
回复
你可以再试一个简单的消息发送,比如关掉某个窗口。
rivershan 2002-11-13
  • 打赏
  • 举报
回复
搞不懂……

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧