在线求助,跨进程拦截WM_SETFOCUS消息
直接上代码吧
LRESULT CALLBACK KeyProc ( int code, WPARAM wParam, LPARAM lParam)
{
MSG *lpMsg;
lpMsg = (MSG*)lParam;
if(lpMsg->message==WM_SETFOCUS)
{
::MessageBox(NULL,"拦截到消息","",MB_OK);
}
return CallNextHookEx (gkeyhook,code,wParam,lParam);
}
void __stdcall SetHidehook ( DWORD threadID)
{
gkeyhook = ::SetWindowsHookEx ( WH_GETMESSAGE,(HOOKPROC) KeyProc, ::GetModuleHandle ("xxx.dll"), threadID) ;
}
void __stdcall UnHidehook (HWND ahwnd)
{
UnhookWindowsHookEx (gkeyhook) ;
}
现在测试到,把if(lpMsg->message==WM_SETFOCUS)条件去掉,可以MessageBox弹出。加上条件就弹不出了,求助解决!!
先在此谢过。
[解决办法]
用WH_CBT类型的钩子,注意回调函数必须在dll中实现
当nCode == HCBT_SETFOCUS 并返回1 拦截 窗口获取WM_SETFOCUS