资源描述:
《Windows系统钩子与键盘监控》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、网络与计算机技术信息技术与信息化!"#$%&’系统钩子与键盘监控()*!"#$%&’+%%,-#$.*/0%-1$234/殷振岭!商书风!!!"#$%&’()*’+,-.#/,%0(1&’+摘要钩子是!"#$%&’的重要机制,利用它可以实现系统监控、网络监控。本文介绍了怎样创建、使用、撤消钩子,并给出一个监控键盘输入的例子。关键词钩子消息键盘监控566!"#$%&’$()*)%%,"’%#*%78)*"94%18-#8:%94%’"8"%#’%7!"#$%&’;=’"#>"8,9-#/’/’8*91*’%=1:*:-#0*’:%=8*$%=8,’=:)-’9%#
2、"8%1,#*8&%1,,,*/0%-1$-#$9%=’*,*8:;()"’-18":?*’)%&’"8’’41"#:4?*-#$)%&8%:1*-8"8-#$)%&8%’8%4"8&"8)-#*@-94?*-0%=8,*/0%-1$2’4/;()*+,%-#+%%,A*’’->*.*/0%-1$2’4/566在实际工作中,常常需要对所有的键盘输入进行处理。程将发生的事件;一般应用软件只能处理自己程序中的输入,对程序外的键盘0;系统范围的将捕捉系统中所有进程将发生的事件输入无能为力。我们可以使用!"#$%&’的消息钩子处理机消息。制来解决这个问题。在正确使用钩子函数
3、前,我们先讲解钩子函数的工作原理。当创建一个钩子时,!GH5I!3会先在内存中创建一个E钩子原理数据结构,该数据结构包含了钩子的相关信息,然后把该结所谓“钩子”,原理并不是很复杂。大家知道,!"#$%&’是构体加到已经存在的钩子链表中去。新的钩子将加到老的利用消息来驱动的,鼠标和键盘动作发生后会产生相应的消前面。当一个事件发生时,如果安装的是一个局部钩子,该息,通常这些消息会被!"#$%&’操作系统直接发送到相应的进程中的钩子函数将被调用。如果是一个远程钩子,系统就应用系统来处理,即:消息"应用程序。一般软件只能收到必须把钩子函数插入到其它进程的地址空间,要做到这一
4、发给自己的键盘消息,收不到其它程序的键盘消息,故不能点,要求除工作日志钩子和工作日志回放钩子外,其它钩子记录全部键盘输入。而“钩子”机制就是在消息发到应用程必须在一个动态链接库(566)中。序之前先拦截到它,交给钩子处理程序,消息处理完毕后再B钩子类型由操作系统发给原来的应用程序,即:消息"被钩子拦截并处理"应用程序,有些类似中断处理,这样就可以实现键盘钩子一共有EF种,以下是它们被调用的时机:的监控。-;!+2JK66!H5LMIJ当调用3*#$A*’’->*时;利用钩子,可以捕捉自己进程或其它进程发生的事件。0;!+2JK66!H5LMIJMN(当3*#$A*’
5、’->*的调用返回时;通过“钩挂”可以给!GH5I!3一个处理或过滤事件的回调函:;!+2ON(AN33KON当调用O*8A*’’->*或L**,A*’’->*时;数,该函数也叫做“钩子函数”。当每次发生相应的事件时,$;!+2.NP*或L**,A*’’->*来!GH5I!3都将调用该函数。一共有两种类型的钩子:局部从消息队列中查询!A2.NPQL或!A2.NP5I!H消息时;的和远程的。局部钩子仅钩挂自己进程的事件。远程的钩*;!+2AIQ3N当调用O*8A*’’->*或L**,A*’’->*来从子可以钩挂其它进程发生的事件。远程
6、的钩子又有两种:消息队列中查询鼠标事件消息时;-;基于线程的将捕获其它进程中某一特定线程的7;!+2+KM5!KMN当调用O*8A*’’->*或L**,A*’’->*事件。简言之,就是可以用来观察其它进程中的某一特定线来从消息队列中查询非鼠标、键盘消息时;>;!+2A3ORG6(NM当对话框、菜单或滚动条要处理一个消息时。该钩子是局部的,是为那些有自己的消息处理过!山东齐鲁软件股份有限公司济南BCDDEF!!山东政法学院济南BCDDEF程的控件对象设计的;!"!##$年第%期信息技术与信息化网络与计算机技术!"#$%&’&(&)*+,-./和#$0(&)*+,-./
7、一样,只不过及时地撤消,使用函数4@!GG=#1@FGHI$GG=.J,该函数原型是是系统范围的;;33,4@!GG=#1@FGHI$GG=.J(1"#$%234/56,/.73/8当#+583#&从硬件队列中获$$33ID;输入队列中被请求时;L钩子在键盘监控中的应用="#$%&$.,,当关于#+583#&外壳事件发生时,譬如监控键盘录入时,可根据不同的需要选用钩子:任务条需要重画它的按钮;P"记录和回放键盘及鼠标动作时,