我是在同一进程里试的,但始终钩不住WM_COPYDATA消息!!HHOOK hhook1;
HHOOK hhook2;
HHOOK hhook3;
void CtestdllDlg::OnBnClickedOk()
{ COPYDATASTRUCT cps;
cps.cbData = 0;
cps.dwData = HH_StartFish;
cps.lpData = NULL;
hhook1 = SetWindowsHookEx(WH_GETMESSAGE, HookHotKey, NULL, GetCurrentThreadId());
hhook2 = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, NULL, GetCurrentThreadId());
hhook3 = SetWindowsHookEx(WH_CALLWNDPROCRET, CallWndRetProc, NULL, GetCurrentThreadId());
::PostThreadMessage(GetCurrentThreadId(), WM_NULL, 0, 0);
::SendMessage(m_hWnd, WM_COPYDATA, 0, (LPARAM)&cps);}
LRESULT CALLBACK HookHotKey(int code, WPARAM wParam, LPARAM lParam)
{ CWPSTRUCT* pTemp = (CWPSTRUCT*)lParam;
HWND hWnd = pTemp->hwnd;
if(code > 0)
{
if(pTemp->message == WM_COPYDATA)
{
PCOPYDATASTRUCT pCopyDataStruct;
pCopyDataStruct = (PCOPYDATASTRUCT)pTemp->lParam;
if(pCopyDataStruct)
{
if(pCopyDataStruct->dwData == HH_StartFish)
{
::MessageBox(0, "pCopyDataStruct", NULL, MB_OK | MB_ICONSTOP);
}
}
} }

return CallNextHookEx(hhook1, code, wParam, lParam);}LRESULT CALLBACK CallWndProc(int code, WPARAM wParam, LPARAM lParam)
{ CWPSTRUCT* pTemp = (CWPSTRUCT*)lParam;
if(code > 0)
{
if(pTemp->message == WM_COPYDATA)
{
PCOPYDATASTRUCT pCopyDataStruct;
pCopyDataStruct = (PCOPYDATASTRUCT)pTemp->lParam;
if(pCopyDataStruct)
{
if(pCopyDataStruct->dwData == HH_StartFish)
{
::MessageBox(0, "pCopyDataStruct", NULL, MB_OK | MB_ICONSTOP);
}
}
} } return CallNextHookEx(hhook2, code, wParam, lParam);}
LRESULT CALLBACK CallWndRetProc(int code, WPARAM wParam, LPARAM lParam)
{ CWPSTRUCT* pTemp = (CWPSTRUCT*)lParam;
if(code > 0)
{
if(pTemp->message == WM_COPYDATA)
{
PCOPYDATASTRUCT pCopyDataStruct;
pCopyDataStruct = (PCOPYDATASTRUCT)pTemp->lParam;
if(pCopyDataStruct)
{
if(pCopyDataStruct->dwData == HH_StartFish)
{
::MessageBox(0, "pCopyDataStruct", NULL, MB_OK | MB_ICONSTOP);
}
}
} } return CallNextHookEx(hhook3, code, wParam, lParam);}