排行榜 统计
  • 文章总数:665 篇
  • 评论总数:977 条
  • 分类总数:4 个
  • 最后更新:3月12日

系统钩子 截获鼠标-课程设计报告-windows钩子程序实现.doc 13页

本文阅读 20 分钟
首页 网络技巧 正文
本文最后更新于2023年02月07日,已超过50天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

您阅读这篇文章共耗时:

  课程设计报告钩子程序实现班级:学号:姓名:教师评语:教师签名:2010年7月课程设计题目钩子程序实现目的和背景目的:1)更深入的学习C++,并学会在Visual C++ 6.0上编写应用程序2)了解钩子程序的基本原理,类型和实现过程3)掌握用C++来设计一个钩子程序背景:钩子的本质是一段用以处理系统消息的程序,通过系统调用,把他挂入系统。钩子的种类很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时钩子函数可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。鼠标钩子是能截获鼠标的操作,包括单击,双击,鼠标所在的位置等;而键盘钩子是截获从键盘输入的信息。主要内容1)熟悉钩子程序在操作系统的作用2)通过找资料,学习钩子程序的基本原理,包括的消息传递机制,钩子的概念,钩子的类型,钩子的实现过程3)学习和掌握钩子函数,Win32全局钩子的运行机制,VC6中MFC DLL的分类及特点和在VC6中全局共享数据的实现4)用C++编写一个钩子程序;实现适时获取当前鼠标所在窗口的标题和监视各种键盘消息[1] 王育坚[2] 王西武阎梅 赵怀勋 在VC6下应用系统钩子技术 现代电子技术? 2004:27(17)?.[3] 徐士良常用算法程序集:C++语言描述第4版清华大学出版社2009.7.[4] 钱能C++程序设计教程:设计思想与实现修订版清华大学出版社2009.7.[5] 游洪跃, 伍良富, 王景熙C++面向对象程序设计实验和课程设计教程清华大学出版社2009.2.[6] 倪步喜.的钩子技术及实现[J].计算机与现代化.2007,28(1):28-30.1目的和背景钩子的本质是一段用以处理系统消息的程序,通过系统调用,把他挂入系统。

  钩子的种类很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出系统钩子 截获鼠标,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时钩子函数可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。鼠标钩子是能截获鼠标的操作,包括单击,双击,鼠标所在的位置等;而键盘钩子是截获从键盘输入的信息。通过这个课程设计,目的是更深入的学习C++,并学会在Visual C++ 6.0上编写应用程序,了解钩子程序的基本原理,类型和实现过程,掌握用C++来设计一个钩子程序。2设计想思钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。对每种类型的钩子由系统来维护一个钩子链,最近安装的钩子放在链的开始,而最先安装的钩子放在最后,也就是后加入的先获得控制权Win32的运行机制Win32 DLL来构造动态链接库。3函数与数据结构(1)函数要实现Win32的系统钩子,必须调用SDK中的API函数来安装这个这个函数的原型是idHook:表示钩子类型,它是和钩子函数类型一一对应的比如,示安装的是键盘钩子,表示是鼠标钩子等。

  Lpfn:是钩子函数的地址HMod:是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子该参数为钩子函数所在的DLL句柄。 :指定钩子所监视的线程的线程号。对于全局钩子,该参数为:返回所安装的钩子句柄。值得注意的是线程钩子和系统钩子的钩子函数的位置有很大的差别。线程钩子一般在当线程或者当前线程派生的线程内,而系统钩子必须放在独立动态链接库中WINAPI 当一个进程或线程载入和 卸载DLL时,都要调用该函数,它的原型是BOOL WINAPI ( ,DWORD , LPVOID );其中第一个参数表示DLL的实例句柄;第二个参数它有四个可能的值:(进程载入),(线程载入),(线程卸载), (进程卸载),在函数中可以对传递进来的这个参数的值进行判别,并根据不同的参数值对DLL进行必要的初始化或清理工作。

  系统钩子 截获鼠标_鼠标钩子源码_玩网络棋牌游戏发现游戏带有键盘钩子和鼠标钩子怎么办

  举个例子来说,当有一个进程载入一个DLL时,系统分派给DLL的第二个参数为,这时,你可以根据这个参数初始化特定的数据。第三个参数系统保留在Win32环境下,所有应用程序都有自己的私有空间,每个进程的空间都是相互独立的,这减少了应用程序间的相互影响,但同时也增加了编程的难度。当进程在载入DLL时,系统自动把DLL地址映射到该进程的私有空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间,也就是说每个进程所拥有的相同的DLL的全局数据其值却并不一定是相同的。因此,在Win32环境下要想在多个进程中共享数据,就必须进行必要的设置。亦即把这些需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享。 是鼠标钩子处理函数,当函数第一个参为:时,调用本函数,首先要在系统中安装一个鼠标消息钩子。 函数原型: ( int nCode, WPARAM wParam, LPARAM lParam); 参数:nCode:跟所有其他钩子处理函数一样,当 nCode小于0时:调用()。

  玩网络棋牌游戏发现游戏带有键盘钩子和鼠标钩子怎么办_系统钩子 截获鼠标_鼠标钩子源码

  nCode 可以是 。当nCode等于时,wParam和lParam 包含鼠标信息当nCode等于时,wParam和lParam 包含鼠标信息,并且鼠标消息没有从消息队列里移除wParam:指定鼠标消息:一个 结构的指针返回值:如果参code小于0,则必须 返回(),也就是()的返回值如果参数code大于等于0,并且钩子处理函数没有处理消息,()的返回值,否则当您安装钩子的应用程序将不会得到通知,并且得到一个错误的结果如果钩子处理的消息,您可以返回一个非0值,防止系统把消息发送到目标窗口程序。Proc是键盘钩子处理函数 函数原型: ( int wParam, LPARAM lParam );参数:Code:根据这个数值决定怎样处理消息如code 小于0,则必须()函数返回() code可以是下列值::wParam和lParam包含按键消息:wParam和lParam包含按键消息,并且按键消息不能从消队列中移除wParam:按键的虚拟键值消息 lParam:32位内存,内容描述包括:指定扩展键值,扫描码,上下文,重复次数。

  系统钩子 截获鼠标_玩网络棋牌游戏发现游戏带有键盘钩子和鼠标钩子怎么办_鼠标钩子源码

  0-15位: 按下键盘次数16-23位指定扫描码依赖于OEM 24位为1时候:表示按键是扩展键为0时候:表示按键是是数字键盘按键25-28位保留位 29位上下文键:为1时: ALT按下,其他情况为0 30位如果是按键按下后发送的消息,30位为1,如果是按键抬起后3位为131位指定转变状态:31位为0时候,按键正在被按下系统钩子 截获鼠标,为1时候,按键正在被释放返回值:如果参数code小于0,则必须返回(),也就是返回()的返回值 如果参数code大于等于0,并且钩子处理函数没有处理消息返回()的返回值,否则当您安装钩子时,钩子将不会得到通知,并返回错误结果。如果钩子处理的消息,可以返回一个非0值,防止系统把消息传递给钩子链中的下一个钩子,或者把消息发送到目标窗口。功能是调用下一个钩子(hhk HHOOK,nCode ,wParam WPARAM,lParam LPARAM);参数:HHOOK:当前钩子的句柄nCode:钩子代码; 就是给下一个钩子要交待的WPARAM:要传递的参数; 由钩子类型决定是什么参数LPARAM:要传递的参数; 由钩子类型决定是什么参数返回返回下一个钩子执行后的返回值0表示失败 参数 nCode选值 = 0; = 1; = 2; = 2; = 3; = ; = 4; = 5;(HWND ,POINT point,UINT uFlags );其中:第一个参数为处理父窗口;第二个参数point为光标的坐标;第三个参数uFlags为窗口的选择。

  系统钩子 截获鼠标_玩网络棋牌游戏发现游戏带有键盘钩子和鼠标钩子怎么办_鼠标钩子源码

  这里默认为(忽略不可见的子窗口该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到口窗程序处理完消息再返回。原型为(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);参数:hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。Msg:指定被发送的消息。wParam:指定附加的消息指定信息。IParam:指定附加的消息指定信息。返回值:返回值指定消息处理的结果,依赖于所发送的消息。图1 的实现过程4具体实现步骤其具体实现过程见图2(1)建立钩子KSHook.DLL①选择MFC (DLL)创建项目KSHook;②选择MFC DLL(共享MFC拷贝)类型;③由于VC5没有现成的钩子类,所以要在项目目录中创建KSHook.h文件,在其中建立钩子图2主程序流程图类:class : public {public:();//钩子类的构造函数 ~();//钩子类的析构函数public:BOOL (HWND hWnd); //安装钩子函数BOOL ();//卸载钩子函数 };④在KSHook.cpp文件的顶部加入# "KSHook.h"语句;⑤在KSHook.cpp文件的顶部加入全局共享数据变量:#pragma ("mydata")HWND =NULL; //上次鼠标所指的窗口句柄HWND =NULL; //显示目标窗口标题编辑框的句柄HHOOK =NULL; //安装的鼠标勾子句柄HHOOK glhkey=NULL;//安装的键盘勾子句柄 =NULL; //DLL实例句柄 #pragma ()⑥在DEF文件中定义段属性: READ WRITE SHARED ⑦在主文件KSHook.cpp的函数中加入保存DLL实例句柄的语句:=; ⑧钩子函数的实现:(详细代码见附录1)⑨类KSHook的成员函数的具体实现:(详细代码见附录2)⑩编译项目生成KSHook.dll。

  系统钩子 截获鼠标_玩网络棋牌游戏发现游戏带有键盘钩子和鼠标钩子怎么办_鼠标钩子源码

  (2)创建钩子可执行程序①用MFC的(EXE)创建项目Hook;②选择“基于对话应用”并按下“完成”键;③编辑对话框,删除其中原有的两个按钮,加入静态文本框和编辑框,用鼠标右键点击静态文本框,在弹出的菜单中选择“属性”,设置其标题为“鼠标所在的窗口标题”;④在.h中加入对KSHook.h的包含语句# "KSHook.h";⑤在.h的类定义中添加私有数据成员: m_hook; //加入钩子类作为数据成员BOOL ;⑥修改::()函数:CWnd * pwnd=(); //取得编辑框的类指针m_hook.(pwnd->());//取得编辑框的窗口句柄并安装钩子 ⑦链接DLL库,即把..\KSHook\debug\ KSHook ook.lib加入到项目设置链接标签中;⑧编译项目生成可执行文件;⑨把KSHook ook.DLL拷贝到..\Hook \debug目录中;⑩先运行几个可执行程序,然后运行Hook.exe程序,把鼠标在不同窗口中移动,在Hook程序窗口中的编辑框内将显示出鼠标所在的应用程序主窗口的标题(见附录4)。

  按下键盘上的一些键,可以发现EXE目录下自动生成了一个key.txt文件,该文件记载了你的按键信息C++语言在Visual C++ 6.0编程软件上编程实现的。整个程序包括两个模块,一个是KSHook.dll模块,它是把钩子函数集成在动态链接库中,利用动态链接库可以实现全局的钩子程序,它是程序的核心部分,里面包含钩子的创建、具体实现、撤消方面的内容,在创建时用到函数,在具体实现时用到函数、函数、函数,在撤消时用到函数来卸载钩子;另一个模块是Hook.exe模块,它是程序的入口,也是实现对话界面的,在运行过程中要调用KSHook.dll模块,来实现程序的功能。在本次课程设计中,自己付出了很多的时间,不仅在课程安排时间里认真的做,而且在课余时间也开了很多的时间。从不知道钩子什么开始,到现在能自己编写了一个简单的鼠标键盘钩子程序,我的收获是很大的。这次用到的是Visual C++编程软件,在此以前,都没有用过这个软件,在学习C++时用的也不是这个软件,因此在开始做设计的前几天也花了一些时间去学习这个软件的应用,现在自己已经初步掌握了这个软件的应用了,但是要想熟练的应用还需进一步的学习。

  从这次课程设计中,我深刻的体会到重在坚持的意义,很多的东西一开始我们并不会的,但是只要坚持的看进去,一遍一遍的不厌其烦看,会发觉慢慢的就懂了,因此,无论做什么事都要有决心和恒心。6参考文献[1] 王育坚王西武阎梅 赵怀勋 在VC6下应用系统钩子技术 现代电子技术? 2004:27(17):45-46.[3] 徐士良常用算法程序集:C++语言描述第4版清华大学出版社2009.7.[4] 钱能C++程序设计教程:设计思想与实现修订版清华大学出版社2009.7.[5] 游洪跃, 伍良富, 王景熙C++面向对象程序设计实验和课程设计教程清华大学出版社2009.2.[6] 倪步喜.的钩子技术及实现[J].计算机与现代化.2007,28(1):28-30.附录1:(钩子函数的具体实现)//鼠标钩子函数 WINAPI (int nCode,WPARAM wparam,LPARAM lparam){ =( FAR )lparam; if (nCode>=0) {HWND =(NULL,->pt);if(!=){char [100];(,,100) //取目标窗口标题if(())(,,0,(LPARAM)());=; //保存目标窗口}}return (,nCode,wparam,lparam); //继续传递消息} //键盘钩子函数 (int nCode,WPARAM wParam,LPARAM lParam){ char ch=0; FILE fl; if( ((DWORD)lParam&0x) && (==nCode) ) //有键按下 {fl=fopen("key.txt","a+"); //输出到key.txt文件if (wParam=0x100)ch=' ';else{BYTE ks[256];(ks);WORD w;UINT scan=0;(wParam,scan,ks,&w,0);//ch=(wParam,2); //把虚键代码变为字符ch =char(w);}fwrite(&ch, sizeof(char), 1, fl);fclose(fl); } return ( glhkey, nCode, wParam, lParam ); }附录2:(类KSHook的成员函数的具体实现)::(){}::~(){if(&&glhkey){();(glhkey);}}//安装钩子并设定接收显示窗口句柄BOOL ::(HWND hWnd){BOOL =FALSE;=(,,,0); glhkey=(,,,0);if(!=NULL&&glhkey!=NULL)=TRUE;=hWnd; //设置显示目标窗口标题编辑框的句柄return ; }//卸载钩子BOOL ::() {BOOL =FALSE; BOOL =FALSE;if(&&glhkey){= ();= (glhkey);if(&&){=NULL;=NULL; //清变量=NULL;glhkey=NULL;}}return ;} 附录3:(获取窗口句柄)HWND (HWND ,POINT point,UINT uFlags){if( != NULL)return ::Ex(, point, uFlags);//返回光标(point)所在点的子窗口句柄RECT rect, ;HWND pWnd, hWnd, ;hWnd = ::(point);//得到光标(point)所在点的窗口句柄if(hWnd != NULL){::(hWnd, &rect); //得到整个窗口在屏幕上的矩形框位置pWnd = ::(hWnd);//得到父窗口句柄if(pWnd != NULL){ = hWnd;do{=::(, );//如果再也找不到这样的窗口,该函数就会返回NULL::(, &);if(::(&, point) && ::() == pWnd &&::()){//比较看谁的面积最小if(((.right-.left) * (.bottom - .top))

本文来自投稿,不代表本站立场,如若转载,请注明出处:https://xuan.ddwoo.top/index.php/archives/951/
-- 展开阅读全文 --
printf输出字符串加0-printf命令详解
« 上一篇 02-05
永久免费的公共UNIX服务器
下一篇 » 02-07
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

发表评论

本站已加入互联网信息服务许可,请规范您的言行哦~

成为第一个评论的人

作者信息

热门文章

珍惜时间哦~

今日一言

- -
加载中...
换一句

今日天气

标签TAG

热评文章