Windows API 教程(七) hook 钩子监听
2017-05-22 21:51
288 查看
Windows API 教程(七) hook 钩子监听
Posted on 2013-08-15茵蒂克丝
如何创建一个窗口手动创建窗口的流程
实际代码
安装钩子 (Install hook)
钩子简介
SetWindowsHookEx 函数
设置监听【键盘】消息
设置监听【鼠标】消息
如何创建一个窗口
另外一个再录的 Windows SDK教程 里面有讲到快捷创建窗口的方式,不过这样的话要分好几个文件,感觉有点混所以这里就用原始的方式创建一个窗口。那么,为什么讲到 hook(钩子)的时候要去创建窗口呢?其实这个问题说起来也不复杂,简单点说,按博主这样写不用写DLL也不用资源文件,实际上是把问题简化了一些。通常 hook 是用来监听自己窗口上的键盘和鼠标输入的,监听全局的通常是设置一些全局的热键(如QQ的 Ctrl+Alt+Z 调出QQ窗口),这些常见的功能也都是要依托窗口才能存在。所以我们先来简单说下手动建立一个窗口的流程。
手动创建窗口的流程
设置注册窗口结构体使用【窗口结构体】注册窗口
创建窗口
显示窗口
窗口过程处理
消息循环
实际代码
这里不会详细讲这个,有感兴趣的可以去追博主的 SDK教程 或者去搜 杨中科的《C语言也能干大事》安装钩子 (Install hook)
简介
窗口建好了之后就要开始转到我们的正题了,首先我们需要明确的是,这个钩子(hook)到底是什么,那么博主这里也不做太书面的解释留下几个链接:百度百科:hook
MSDN: Hooks
博客园: Beginning HOOK
各位可以多多参考,那么博主说下自己的理解:
windows 系统中的【hook 机制】,就类似于一个【消息过滤网】,如果我们向操作系统申请并成功对某个窗口安装了一个【hook】指定了【回调函数】,那么这个【回调函数】也就相当于我们人为对这个窗口添加了一个【消息过滤网】。此时当 windows 操作系统要对这个窗口发送任何消息的时候(例如按键、鼠标点击等消息)操作系统会先调用我们在【消息过滤网】中设置的【回调函数】去接受、处理、过滤等等,当然如果你在【回调函数】中拿到了数据却没有继续传递给窗口的话,就相当于拦截了这些消息。
打个简单的比方,如果你在系统全局安装了一个【键盘消息】的钩子,并且在其指定的【回调函数】中没有把这个键盘消息继续传递给系统上的窗口,那么你的所有【键盘消息】都被这个【hook】也就我们挂在这个【消息过滤网】上的【回调函数】给拦截了,这也意味着你的键盘会失灵。
SetWindowsHookEx 函数
那么 SetWindowsHookEx 函数就是我们用来在 windows 操作系统上安装钩子的函数,我们简单来看一下这个函数的原型:百度百科: SetWindowsHookEx
MSDN: SetWindowsHookEx
设置监听【键盘】消息
PKBDLLHOOKSTRUCT 是 WH_KEYBOARD_LL 方式中用来接收消息的结构体,大家可以到 WindUser.h 中多逛逛。我们监听键盘的时候主要用的是该结构体的 vkCode(value code)和 scanCode 这两个字段。即键盘的【值码】和【扫描码】那么为什么判断一个按键要分成两个部分呢,原因是因为世界上的键盘有很多种,不同国家、不同厂商生产的键盘甚,至同一个键盘上【同样的键】不同的地方按下都可能会有差异。vkCode 是常见的一般都是公用的键盘值,而 scanCode 扫描码则是用来辅助区分的一个一个参数,例如同样是按下 ctrl 键,他们的 vkCode 是相同的但是 scanCode 却不同。
顺便提一句,各位也不要用这个功能去做什么坏事,比如去监听QQ窗口的键盘消息然后偷到密码盗别人号之类的, 博主已经试过了 这个本身有带防护的,用户在输密码的时候,会有干扰的键盘消息也一起冒出来所以没那么简单能到到别人输的密码。至于写个程序去拦截别人的键盘还有鼠标消息让别人的电脑不能用的情况,这个确实很容易做到,而且貌似杀毒软件都没办法防,只能自己在自己的电脑上留个后门,怎么写后门?后面的网络编程会说这个。
键盘监听完整代码:
运行截图
设置监听【鼠标】消息
与键盘监听类似,各位直接看代码:https://lellansin.wordpress.com/2013/08/15/windows-api-%E6%95%99%E7%A8%8B%EF%BC%88%E4%B8%83%EF%BC%89-hook-%E9%92%A9%E5%AD%90%E7%9B%91%E5%90%AC%EF%BC%88%E7%BC%96%E5%86%99%E4%B8%AD%EF%BC%89/
相关文章推荐
- Windows API 教程(七) hook 钩子监听
- HOOK钩子教程
- hook函数教程(一)什么是钩子
- HOOK钩子教程
- 钩子(Hook)教程
- 关于HOOK,如何通过钩子截获指定窗口的所有消息
- hook(钩子程序)(转载)
- [转载]Hook钩子攻略
- C#+低级Windows API钩子拦截键盘输入
- yaf hook钩子
- OCX中使用钩子HOOK消息
- Hook钩子程序(续)
- 源码分析Vue.js的监听实现教程
- 如何Hook Windows API
- 钩子(hook)
- HOOK钩子技术1 inline HOOK内联钩子
- Runtime.addShutdownHook添加钩子
- C#.Net的全局键盘钩子(Hook)技术
- HOOK钩子机制学习笔记
- Delphi中的钩子函数HOOK详解