练习 进程钩子 全局钩子
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
练习 进程钩子 全局钩子相关推荐
- VC++ Hook截取鼠标点击窗口消息的问题!全局钩子
VC++ Hook截取鼠标点击窗口消息的问题!全局钩子,高手进! 悬赏分:0 - 提问时间: 2010年05月19日 06时20分 我在做毕业设计,现在遇到一个问题,像求教高手: 我想实现如下功能,当 ...
- Django13-ModelForm中的is_valid及局部钩子、全局钩子源码解析
1.查看is_valid方法,返回self.is_bound和非self.errors def is_valid(self):"""Returns True if the ...
- 通过全局钩子发送自定义消息,实现进程通信
利用钩子进行进程通信,在网上搜了许多帖子还是不明所以. 没办法自己摸索了4,5天终于测试好了代码.写下来,希望不要有人像我这样云里雾里的在这上面浪费时间. 钩子的加载 使用函数SetWindowsHo ...
- Delphi中使用全局钩子
[转载] Delphi中使用全局钩子 Delphi中使用全局钩子 DLL代码: unit UnitDll; interface uses Windows; const BUFFER_SIZE = 16 ...
- 使用调试钩子屏蔽全局钩子
WH_DEBUG为调试钩子,用来给钩子函数除错.在系统调用系统中与其他Hook关联的Hook钩子例程之前,系统会调用WH_DEBUG Hook钩子例程.你可以使用这个Hook来决定是否允许系统调用与其 ...
- MFC 全局钩子dll注入监听键盘消息
MFC自带的键盘监听功能只有焦点在MFC程序界面时才能监听键盘消息,要想在MFC程序界面外监听键盘消息,可以通过DLL注入使用全局钩子来监听.首先,通过Visual Studio生成全局钩子的动态库, ...
- 关于dll注入方式的学习(全局钩子注入)
何为dll注入 DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程.我们注入的代码以动态链接库(DLL)的形式存在.DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(shar ...
- 使用Windows全局钩子打造键盘记录器
简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...
- VC++实现全局钩子勾住textout金山快译的原理实现
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 大家都对 ...
最新文章
- 关于申请由中国自动化学会主办“全国大学生智能汽车竞赛”的回函
- linux显卡驱动mxm,linux下我的FX5200显卡驱动安装
- 双控专业就业机器人_工业机器人专业好就业吗?有哪些机器人技术岗位?
- 百度地图 Android SDK - 个性化地图
- 4位先行进位电路 logisim_你真的了解74系列集成电路吗?让我帮你总结一下
- 06Struts2国际化实现
- feign请求的封装
- 从“朕已阅”到“翻牌子”,程序员的仪式感可以有多重?
- CUDA实践指南(十三)
- 信息学奥赛一本通1032
- BAT脚本编写教程(比较易懂和全面)
- CentOS 7 搭建邮件服务器搭建(postfix+dovecot)
- 【转】几种不同格式的json解析
- 服务器怎么做虚拟ip,如何在服务器上添加虚拟IP?看完原来如此简单!!
- python导库快捷指令、快速导库、dlib库
- 使用Haskell和Hubris加强Ruby
- 全域赋能和智慧全球,阿里巴巴大数据技术前瞻与案例
- php 为什么需要apache,【单选题】在学习 PHP 时我们需要安装 Apache 服务器。 Apache 是一种( )服务器。...
- 家用pc游戏菜单_为什么仍然必须登录到家用PC?
- Matlab编程技巧:通过Matlab管理git