首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

在线,跨进程拦截WM_SETFOCUS消息

2012-05-24 
在线求助,跨进程拦截WM_SETFOCUS消息直接上代码吧LRESULT CALLBACK KeyProc ( int code, WPARAM wParam, L

在线求助,跨进程拦截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

热点排行