为什么钩不住WM_COPYDATA消息?该如何解决
为什么钩不住WM_COPYDATA消息?
我是在同一进程里试的,但始终钩不住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);
}
------解决方案--------------------
我来接.
------解决方案--------------------
jiefen
我是在同一进程里试的,但始终钩不住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);
}
------解决方案--------------------
我来接.
------解决方案--------------------
jiefen