C++ 关于钩子的知识点博客网上基本写的都非常详细,这里只是简单分享一下本人练手的编程步骤和一些简单认识。

钩子程序就大概分成了2种:

(1) 进程中的钩子:它 的作用范围只是限定在某个进程中,或者某个线程中。比如我们只想起一个MFC程序,截获在这个MFC程序界面中的所有鼠标,键盘操作。这属于进程中的钩子。

编写普通的进程中的钩子demo,可以直接建立一个小MFC工程就可以了。

(2) 全局的钩子:它的作用范围可以截获整个系统的操作。比如一个程序中开启了全局钩子,启动这个程序之后,就可以让整个电脑的鼠标、键盘不起作用。
编写全局钩子,我看了一下网上的说法都是 先编写一个dll,来提供设置钩子的方法接口,然后再建立一个新的测试程序,来加载这个dll,调用钩子接口

钩子程序大概流程:

【1】调用 SetWindowsHookEx 开启钩子;

eg1:我在MFC对话框中添加了一个按钮,点击按钮就会开启鼠标钩子。

//进程中的钩子---》开启鼠标钩子
void CMFChookTest1Dlg::OnBnClickedButton3()
{// TODO: 在此添加控件通知处理程序代码g_hMouse = SetWindowsHookEx(WH_MOUSE, MouseProc, NULL, GetCurrentThreadId());if (NULL == g_hMouse){MessageBox(L"安装鼠标钩子出错 !", L"error", 0);}

由于是进程中的钩子, SetWindowsHookEx(WH_MOUSE, MouseProc, NULL, GetCurrentThreadId());的第三个参数设置为NULL,第四个参数设置为 GetCurrentThreadId().获取当前的线程。

eg2: 开启一个全局钩子:

g_hMouse = SetWindowsHookEx(WH_MOUSE, MousePro,GetModuleHandle(L"HOOK.dll"),0);

由于是全局钩子,SetWindowsHookEx(WH_MOUSE, MousePro,GetModuleHandle(L"HOOK.dll"),0);的第四个参数设置为0。同时第三个参数设置为  GetModuleHandle(L"HOOK.dll")。HOOK.dll   这是我为全局钩子建立的一个dll工程中编译生成的DLL文件的名字。

【2】编写钩子处理事件子程序;
在eg1中,使用  SetWindowsHookEx(WH_MOUSE, MouseProc, NULL, GetCurrentThreadId())开启了鼠标钩子;
第一个参数:WH_MOUSE  表明是鼠标类型
第二个参数:Mousepro 是自己定义的一个功能函数,函数名字可以随便起,但是格式是固定的。它里面是对钩子截获鼠标操作进行相应的处理,这里就是我们在编写自己程序逻辑的地方。

LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam
)
{//添加任意自定义代码,对wParam、lParam消息进行处理。return 1;//将消息向下一个钩子传递//return CallNextHookEx(NULL, nCode, wParam, lParam);
}

在函数体里,如果只有 return 1:表示对于所有的鼠标操作,都已经在函数内部进行了处理,并且消灭了这些消息。对外的表现就是你的所有鼠标操作都没有效果了。
只有  return CallNextHookEx(NULL, nCode, wParam, lParam); 表示这个钩子对于捕获的鼠标操作处理直接放行,将这些消息传给同类型的下一个钩子。但如果你没有建立多个鼠标钩子(比如我就只设置了一个鼠标钩子),那么鼠标操作就返回给了窗口。对外的表现就是鼠标依然有效。

关于  钩子链  的讲解:  https://www.cnblogs.com/del/archive/2008/02/27/1083011.html

【3】释放钩子

UnhookWindowsHookEx(g_hMouse);g_hMouse = NULL;

我的例子
一、进程中的钩子:
资源下载   http://download.csdn.net/download/wochendaixin/10189989
二、全局钩子
资源下载  http://download.csdn.net/download/wochendaixin/10190013

练习 进程钩子 全局钩子相关推荐

  1. VC++ Hook截取鼠标点击窗口消息的问题!全局钩子

    VC++ Hook截取鼠标点击窗口消息的问题!全局钩子,高手进! 悬赏分:0 - 提问时间: 2010年05月19日 06时20分 我在做毕业设计,现在遇到一个问题,像求教高手: 我想实现如下功能,当 ...

  2. Django13-ModelForm中的is_valid及局部钩子、全局钩子源码解析

    1.查看is_valid方法,返回self.is_bound和非self.errors def is_valid(self):"""Returns True if the ...

  3. 通过全局钩子发送自定义消息,实现进程通信

    利用钩子进行进程通信,在网上搜了许多帖子还是不明所以. 没办法自己摸索了4,5天终于测试好了代码.写下来,希望不要有人像我这样云里雾里的在这上面浪费时间. 钩子的加载 使用函数SetWindowsHo ...

  4. Delphi中使用全局钩子

    [转载] Delphi中使用全局钩子 Delphi中使用全局钩子 DLL代码: unit UnitDll; interface uses Windows; const BUFFER_SIZE = 16 ...

  5. 使用调试钩子屏蔽全局钩子

    WH_DEBUG为调试钩子,用来给钩子函数除错.在系统调用系统中与其他Hook关联的Hook钩子例程之前,系统会调用WH_DEBUG Hook钩子例程.你可以使用这个Hook来决定是否允许系统调用与其 ...

  6. MFC 全局钩子dll注入监听键盘消息

    MFC自带的键盘监听功能只有焦点在MFC程序界面时才能监听键盘消息,要想在MFC程序界面外监听键盘消息,可以通过DLL注入使用全局钩子来监听.首先,通过Visual Studio生成全局钩子的动态库, ...

  7. 关于dll注入方式的学习(全局钩子注入)

    何为dll注入 DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程.我们注入的代码以动态链接库(DLL)的形式存在.DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(shar ...

  8. 使用Windows全局钩子打造键盘记录器

    简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...

  9. VC++实现全局钩子勾住textout金山快译的原理实现

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 大家都对 ...

最新文章

  1. 关于申请由中国自动化学会主办“全国大学生智能汽车竞赛”的回函
  2. linux显卡驱动mxm,linux下我的FX5200显卡驱动安装
  3. 双控专业就业机器人_工业机器人专业好就业吗?有哪些机器人技术岗位?
  4. 百度地图 Android SDK - 个性化地图
  5. 4位先行进位电路 logisim_你真的了解74系列集成电路吗?让我帮你总结一下
  6. 06Struts2国际化实现
  7. feign请求的封装
  8. 从“朕已阅”到“翻牌子”,程序员的仪式感可以有多重?
  9. CUDA实践指南(十三)
  10. 信息学奥赛一本通1032
  11. BAT脚本编写教程(比较易懂和全面)
  12. CentOS 7 搭建邮件服务器搭建(postfix+dovecot)
  13. 【转】几种不同格式的json解析
  14. 服务器怎么做虚拟ip,如何在服务器上添加虚拟IP?看完原来如此简单!!
  15. python导库快捷指令、快速导库、dlib库
  16. 使用Haskell和Hubris加强Ruby
  17. 全域赋能和智慧全球,阿里巴巴大数据技术前瞻与案例
  18. php 为什么需要apache,【单选题】在学习 PHP 时我们需要安装 Apache 服务器。 Apache 是一种( )服务器。...
  19. 家用pc游戏菜单_为什么仍然必须登录到家用PC?
  20. Matlab编程技巧:通过Matlab管理git

热门文章

  1. python清除所有变量_python清除变量
  2. mycat读写分离实验
  3. Python通过paramiko从远处服务器下载文件资源到本地
  4. android 浏览器
  5. 小米升级后开机显示无服务器,小米无法开机解决办法【图文教程】
  6. 安徽理工大学计算机专业等级,许光宇 - 安徽理工大学 - 计算机科学与工程学院...
  7. 基于python爬虫与数据分析系统设计
  8. render props
  9. 无向图输出两个节点之间的所有路径
  10. php tesseract,在PHP中使用Tesseract OCR的一个封装包