关于底层钩子WH_MOUSE_LL

cc98911 2011-05-05 04:29:13
我是个软件专业的大一新生,最近在做一个鼠标拦截的钩子,我用到了底层钩子,但是,钩子安装上去了却没有拦截,仅仅让鼠标的移动变慢了(是不是因为Windows的机制问题,看到一些教程上说如果反应时间太长久忽略),求高手解答!!!主程序调用安装钩子函数,然后延时1分钟后自动卸载钩子。
#define _WIN32_WINNT 0X0500
#include <windows.h>
#include <stdio.h>
#include "mouseh.h"
#define DllExport extern "C"__declspec(dllexport)

HHOOK glhHook=NULL;
HHOOK glhHookend=NULL;
HINSTANCE glhInstance=NULL;


BOOL APIENTRY DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:

break;
}

glhInstance=(HINSTANCE)hInstance;

return TRUE;
}


LRESULT WINAPI MouseProc(int nCod,WPARAM wparam,LPARAM lparam )
{
return TRUE;

}
DllExport BOOL Starthook()
{
BOOL bResult=FALSE;
glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0);
if (glhHook!=NULL)
{
//MessageBox(NULL, "hook 安装成功咯 ", "傻冒 ",0);
bResult=TRUE;
}

return bResult;

}

DllExport BOOL Stophook()
{
return UnhookWindowsHookEx(glhHook);




}
...全文
303 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2011-05-05
  • 打赏
  • 举报
回复
结贴即可
cc98911 2011-05-05
  • 打赏
  • 举报
回复
悲剧了。。。我要怎么给你点数啊。。。
cc98911 2011-05-05
  • 打赏
  • 举报
回复
成功了!谢谢你~~
Lactoferrin 2011-05-05
  • 打赏
  • 举报
回复
消息循环很简单
MSG msg;
while(GetMessageW(&msg,0,0,0)!=-1)DispatchMessageW(&msg);
它们没加是因为它们的界面就有消息循环
cc98911 2011-05-05
  • 打赏
  • 举报
回复
也就是说,我需要在SetWindowsHookEx后加入一个消息循环。。。。。但是,我看到网络上下载的源码或者是网上贴的教程都没有这一步啊。。。可以给我个例子么?关于SetWindowsHookEx这段的
Lactoferrin 2011-05-05
  • 打赏
  • 举报
回复
如果你调用SetWindowsHookEx的线程没有消息循环,MouseProc就根本不会执行,而windows却等它执行,因此很慢
无水先生 2011-05-05
  • 打赏
  • 举报
回复
过滤条件越少越快!
Lactoferrin 2011-05-05
  • 打赏
  • 举报
回复
不是全局钩子都要在dll中,WH_MOUSE_LL就不需要,调用SetWindowsHookEx的线程需要有一个消息循环才能得到钩子被触发的通知,然后调用钩子过程,WH_MOUSE_LL的钩子过程是由调用SetWindowsHookEx的线程执行的
cc98911 2011-05-05
  • 打赏
  • 举报
回复
WM_MOUSE的时候会屏蔽掉一部分的鼠标操作,WM_MOUSE_LL则会变成鼠标的缓慢移动,一直到钩子卸载
cc98911 2011-05-05
  • 打赏
  • 举报
回复
=。=
打错了。。。的确是WH_MOUSE_LL,这个是我测试不是底层钩子时候用到的
WH_MOUSE_LL不需要在DLL中吗?它不是个全局钩子么?
Lactoferrin 2011-05-05
  • 打赏
  • 举报
回复
你这是WH_MOUSE又不是WH_MOUSE_LL,WH_MOUSE_LL的钩子过程是不需要在dll中的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧