一个程序如何截获另外一个程序发送消息

来源:百度知道 编辑:UC知道 时间:2024/05/21 22:34:28
我在一个程序的按钮点击函数里写了
HWND hWnd = ::FindWindow("图元编辑", NULL);
if (hWnd)
{
::SendMessage(hWnd, WM_COPYDATA, 0, 0);
}

然后在另外一个程序里截获该消息
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
int i = 0;

return true;
}
并在这个函数里打断点 可是还是不能没有反应
消息映射ON_WM_COPYDATA()
消息函数原型声明afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
并且我也是先开的截获消息的程序,后开的发送消息的函数
请问是什么原因呢?
To blackscreen
你做的是自定义消息,我写的是系统里的消息,自定义只能是传递整数类型的数据,而不能传递字符串的
WM_COPYDATA消息就是进程之间传递消息

如果你要解决一个程序接收(非截获)另外一个程序发送的消息,可以如下步骤:
1、消息发送程序定义消息
#define WM_COPYDATA 4004

2、消息发送程序寻找接收消息的窗体并发送消息
HWND hWnd = ::FindWindow("图元编辑", NULL);
if (hWnd)
{
::SendMessage(hWnd, WM_COPYDATA, 0, 0);
}//图元编辑 是接收消息的窗体的标题

3、消息接收程序定义消息(一定要和发送程序消息定义一致)

#define WM_COPYDATA 4004

4、设计消息接收函数进行处理
void OnRealDataReady(WPARAM wp,LPARAM lp);//声明
ON_MESSAGE(WM_COPYDATA,OnRealDataReady)//映射
下面是实现
描 述:接收到实时量数据准备好的消息
**************************************************************/
void CMainFrame::OnRealDataReady(WPARAM wp, LPARAM lp)
{
// MessageBox("接收到消息");

CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
CQuickTestView* pView = (CQuickTestView*)pMainFrame->GetActiveView();

if(bstarttest)
{
CString stip = gcfg.CLcsyl[tdpos-1].csname;
stip.Format("测试用例“"+stip+"”--结束第%d次实时量