c#钩子教程byzhang

c#钩子教程byzhang

ID:32365936

大小:47.59 KB

页数:8页

时间:2019-02-03

c#钩子教程byzhang_第1页
c#钩子教程byzhang_第2页
c#钩子教程byzhang_第3页
c#钩子教程byzhang_第4页
c#钩子教程byzhang_第5页
资源描述:

《c#钩子教程byzhang》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、c#钩子Hook(钩子)是WINDOWS提供的一种消息处理机制平台,是指在程序正常运行中接受信息之前预先启动的函数,用来检查和修改传给该程序的信息,(钩子)实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。注意:安装钩子函数将会影响系统的性能。监测“系统范围事件”的系统钩子特别明显。因为系统在处理所有的相关事件时都将调用您的钩子函数,这样您的系统将会明显的减慢。所以应谨慎

2、使用,用完后立即卸载。还有,由于您可以预先截获其它进程的消息,所以一旦您的钩子函数出了问题的话必将影响其它的进程。记住:功能强大也意味着使用时要负责任。钩子2HOOK链WINDOWS提供了14种不同类型的HOOKS;不同的HOOK可以处理不同的消息。例如,WH_MOUSEHOOK用来监视鼠标消息。WINDOWS为这几种HOOKS维护着各自的HOOK链表。HOOK链表是一串由应用程序定义的回调函数(CALLBACKFunction)队列,当某种类型的消息发生时,WINDOWS向此种类型的HOOK链的第一个函数(HOOK链的顶部)发送该消息,在第一函数处理完该消息后由该函

3、数向链表中的下一个函数传递消息,依次向下。如果链中某个函数没有向下传送该消息,那么链表中后面的函数将得不到此消息。(对于某些类型的HOOK,不管HOOK链中的函数是否向下传递消息,与此类型HOOK联系的所有HOOK函数都会收到系统发送的消息)一些Hook子过程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子过程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。3钩子的作用范围一共有两种范围(类型)的钩子:局部的和远程的(别人的.相对于自己都是远的)。一、局部钩子仅钩挂您自己进程的事件。二

4、、远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种:1、基于线程的它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。2、系统范围的将捕捉系统中所有进程将发生的事件消息。现在开始操练一下首先你要调动win32API函数的准备工作,声明(根据查找资料,需要调用委托三个参数)publicdelegateintHOOKPROC(intnCode,intwParam,IntPtrlParam);[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConventio

5、n=CallingConvention.StdCall)]publicstaticexternintSetWindowsHookEx(HookTypeidHook,HOOKPROCIpfn,IntPtrhInsTance,intthreadId);[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]publicstaticexternboolUnhookWindowsHookEx(intidHook);[DllImport("user32.d

6、ll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]publicstaticexternintCallNextHookEx(intidHook,intnCode,Int32wParam,IntPtrlParam);//取得当前线程编号(线程钩子需要用到)[DllImport("kernel32")]publicstaticexternintGetCurrentThreadId();根据声明需要知道//定义钩子句柄 inthHook=0;//定义钩子的类型 int WH_KEYBOA

7、RD_LL=13(好像十四个,忘记了)//定义钩子的处理函数   publicHOOKPROCproc; 在这里使用的是委托//定义结构,这里是键盘结构[StructLayout(LayoutKind.Sequential)]   public classKeyboardHookStruct   {publicintvkCode;   publicintscanCode;   publicintflags;    publicinttime;    publicintdwExtraInfo;   }设置钩子     publicoverrideint

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。