大局钩子
全局钩子
照着孙鑫老师的教程写了一个全局HOOK dll,屏蔽了键盘和鼠标消息,和一个MFC对话框程序调用全局HOOK。屏蔽键盘消息函数中留了F2退出的后路。
运行时功能一切正常。但是为什么我用ALT+TAB 切换到其他窗口没有作用(运行HOOK函数窗口(我的是对话框)变灰了,不是活动窗口了),也切不回来(孙鑫老师他的电脑却可以,还能切回来,因此F2键就没作用了,搞得每次都重启电脑)。。。
还有一个问题我不明白的:
HHOOK g_hMouse;
HHOOK g_hKey;
HWND g_hWnd;//传入值,存放调用dll的窗口句柄(我的是对话框)
void SetHook(HWND hWnd)
{
g_hWnd=hWnd;//存放调用dll的窗口句柄(我的是对话框)
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("dll_hook.dll"),0);
g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("dll_hook.dll"),0);
}
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
return 1;
}
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if(VK_F2==wParam)
{
::SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hMouse);
UnhookWindowsHookEx(g_hKey);
}
return 1;
}
运行后显示对话框,然后切换到其他窗口,按F2键 关不了我的对话框窗口这个我知道,但是为什么 UnhookWindowsHookEx(g_hMouse);
UnhookWindowsHookEx(g_hKey);取消不了HOOK呢?g_hMouse和g_hKey又不是传入值?!
------解决方案--------------------
不知道你是怎么切换到其他窗口的,如果用鼠标点击其他窗口是不行的,因为鼠标消息也被hook掉了,这时点击F2是不起作用的。
用ALT-TAB切换到其他窗口时点击F2,应该是有用的,注意ALT-TAB之后不要再用鼠标点击其他地方了。
------解决方案--------------------
具体查看老师的代码,找出差异。。
照着孙鑫老师的教程写了一个全局HOOK dll,屏蔽了键盘和鼠标消息,和一个MFC对话框程序调用全局HOOK。屏蔽键盘消息函数中留了F2退出的后路。
运行时功能一切正常。但是为什么我用ALT+TAB 切换到其他窗口没有作用(运行HOOK函数窗口(我的是对话框)变灰了,不是活动窗口了),也切不回来(孙鑫老师他的电脑却可以,还能切回来,因此F2键就没作用了,搞得每次都重启电脑)。。。
还有一个问题我不明白的:
HHOOK g_hMouse;
HHOOK g_hKey;
HWND g_hWnd;//传入值,存放调用dll的窗口句柄(我的是对话框)
void SetHook(HWND hWnd)
{
g_hWnd=hWnd;//存放调用dll的窗口句柄(我的是对话框)
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("dll_hook.dll"),0);
g_hKey=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("dll_hook.dll"),0);
}
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
return 1;
}
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if(VK_F2==wParam)
{
::SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hMouse);
UnhookWindowsHookEx(g_hKey);
}
return 1;
}
运行后显示对话框,然后切换到其他窗口,按F2键 关不了我的对话框窗口这个我知道,但是为什么 UnhookWindowsHookEx(g_hMouse);
UnhookWindowsHookEx(g_hKey);取消不了HOOK呢?g_hMouse和g_hKey又不是传入值?!
------解决方案--------------------
不知道你是怎么切换到其他窗口的,如果用鼠标点击其他窗口是不行的,因为鼠标消息也被hook掉了,这时点击F2是不起作用的。
用ALT-TAB切换到其他窗口时点击F2,应该是有用的,注意ALT-TAB之后不要再用鼠标点击其他地方了。
------解决方案--------------------
具体查看老师的代码,找出差异。。