用WM_COPYDATA的前提:
1,知道接收消息进程的句柄。
2,接收消息进程重载了WM_COPYDATA消息映射,能对其做出反应(否则不是发送端自作多情了?)
看过前提,的出结论:在自己写的两个进程间用WM_COPYDATA再好不过。
下面CODE几行就说明了一切。
获得句柄的方法,最简单的方法就是使用FindWindow,找窗口类,或者名,如果你觉得这样不把握,那就利用SetProp个窗口做个记号....(不说这些,跑踢儿了都)
发送端代码:
HWND hWnd = FindWindow(NULL, "MyApp ");
if(hWnd!=NULL)
{
COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/
cpd.dwData = 0;
cpd.cbData = strlen( "字符串 ");
cpd.lpData = (void*) "字符串 ";
::SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cpd);//发送!
}
接收端重载ON_WM_COPYDATA消息映射函数(下面是手工所要加的,你最好还是用ClassWizard)
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
ON_WM_COPYDATA()/*消息映射*/
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
AfxMessageBox((LPCSTR)(pCopyDataStruct-> lpData));/*利用对话框表示收到消息*/
return CWnd::OnCopyData(pWnd, pCopyDataStruct);
}