为什么我设了鼠标钩子后只能钩住我的程序窗口中的鼠标消息
#pragma data_seg("MyData")
HHOOK hHook = NULL;
HINSTANCE hIns = NULL;
#pragma data_seg()
//安装 Hook
DLLEXPORT BOOL CALLBACK InstallHook()
{ AFX_MANAGE_STATE(AfxGetStaticModuleState());
hIns = AfxGetInstanceHandle();
hHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, hIns, 0);
....
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if( nCode < 0 )
return CallNextHookEx(hHook, nCode, wParam, lParam);
if( nCode == HC_ACTION){
******************这里面的代码只有在鼠标在本窗口中有所动作时才会执行*****
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
看了别人的HOOK也是这样设的,但就不明白为什么他们的可以正常运行,而我的不行,请高手指教
问题点数:40、回复次数:9Top
1 楼everandforever(Forever)回复于 2005-12-12 17:09:43 得分 5
全局钩子要放在DLL中Top
2 楼gohappy_1999(碧水蓝天)回复于 2005-12-12 17:11:51 得分 8
确定吗?
if( nCode == HC_ACTION){
******************这里面的代码只有在鼠标在本窗口中有所动作时才会执行*****
这里加个MESSAGEBOX看看是否真的是你说的那样
}
Top
3 楼nilliu(liuxy)回复于 2005-12-12 17:22:18 得分 7
钩子函数可以放在应用程序中或者dll中,如果要创建全局钩子或者远程钩子需要将钩子放在动态dll中。Top
4 楼qingz(一只来自北方的*)回复于 2005-12-12 17:29:14 得分 0
是放在动态DLL中Top
5 楼qingz(一只来自北方的*)回复于 2005-12-12 17:37:04 得分 0
在 What type of Dll would you like 中我选的是
Regular Dll using shared MFC DllTop
6 楼cdo(Everything has a favourable turn)回复于 2005-12-12 17:37:34 得分 5
应该是hook不对,要放在动态的dll中。Top
7 楼hushuangyan74()回复于 2005-12-12 17:41:10 得分 10
从你目前提供的代码来看,看不出问题,可能还要看看其他的代码!Top
8 楼qingz(一只来自北方的*)回复于 2005-12-12 17:50:40 得分 0
我在下面的函数中将鼠标钩子改为键盘钩子后也是只能接收本窗口的键盘消息,是不是我哪里弄错了?
DLLEXPORT BOOL CALLBACK InstallHook()
{ hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)MouseProc, hIns, 0);
....
}Top
9 楼leoduba(想工作但无人招)回复于 2005-12-12 18:19:16 得分 5
兄弟,上面的人说得很清楚,全局的钩子要放在DLL里面才能用。Top




