推广 热搜:   成考招生简章  成考分数查询入口  公布  成考招生专业介绍  广东成考寻求志愿填报  现场确认时间  北京成考打印准考证  成考网上报名步骤  21日 

键盘事件的挂钩监控原理及其应用

   日期:2021-07-27     来源:www.fishupup.com    作者:未知    浏览:958    评论:0    
核心提示:WINDOWS的消息处置机制为了能在应用程序中监控系统的各种事件消息,提供了挂接各种反调函数的功能。
WINDOWS的消息处置机制为了能在应用程序中监控系统的各种事件消息,提供了挂接 各种反调函数的功能。这种挂钩函数类似扩充中断驱动程序,挂钩上 可以挂接多个反调函数构成一个挂接函数链。系统产生的各种消息第一被送到各种 挂接函数,挂接函数依据各自的功能对消息进行监视、修改和控制等,然后交还控 制权或将消息传递给下一个挂接函数以致最后达到窗口函数。WINDOW系统的这种反 调函数挂接办法虽然会略加影响到系统的运行效率,但在不少场所下是很有用 的,通过合理有效地借助键盘事件的挂钩函数监控机制可以达到预想不到的好效 果。
1、在WINDOWS键盘事件上挂接监控函数的办法
WINDOW下可进行挂接的过滤函数包括11种:
WH_CALLWNDPROC 窗口函数的过滤函数
WH_CBT 计算机培训过滤函数
WH_DEBUG 调试过滤函数
WH_GETMESSAGE 获得消息过滤函数
WH_HARDWARE 硬件消息过滤函数
WH_JOURNALPLAYBACK 消息重放过滤函数
WH_JOURNALRECORD 消息记录过滤函数
WH_MOUSE 鼠标过滤函数
WH_MSGFILTER 消息过滤函数
WH_SYSMSGFILTER 系统消息过滤函数
WH_KEYBOARD 键盘过滤函数
其中键盘过滤函数是最常用最有用的过滤函数种类,无论是哪一类型型的过滤函 数,其挂接的基本办法都是相同的。 WINDOW调用挂接的反调函数时一直先调用挂接链首的那个函数,因此需要将键盘挂 钩函数借助函数SetWindowsHookEx将其挂接在函数链首。至于消息是不是传递给函 数链的下一个函数是由每一个具体函数功能确定的,假如消息需要传统给下一个函 数,可调用API函数的CallNextHookEx来达成,假如不传递直接返回即可。 挂接函数可以是用来监控所有线程消息的全局性函数,也可以是单独监控某一线程 的局部性函数。假如挂接函数是局部函数,可以将它放到一个.DLL动态链接库中, 也可以放在一个局部模块中;假如挂接函数是全局的,那样需要将其放在一个.DLL 动态链接库中。挂接函数需要严格根据下述格式进行声明,以键盘挂钩函数为例:
int FAR PASCAL KeyboardProc 其中KeyboardProc为概念挂接函数名,该函数需要在模块概念文件中借助EXPORTS命 令进行说明;nCode决定挂接函数是不是对目前消息进行处置;wParam和lParam为具体 的消息内容。

2、键盘事件挂接函数的安装与下载 在程序中可以借助函数SetWindowsHookEx来挂接过滤函数,在挂接函数时需要指 出该挂接函数的种类、函数的入口地址与函数是全局性的还是局部性的,挂接函 数的具体调用格式如下:
SetWindowsHookEx 其中iType为挂接函数种类,键盘种类为WH_KEYBOARD,iProc为挂接函数地址,hInst 为挂接函数链接库实例句柄,iCode为监控代码-0表示全局性函数。 假如挂接函数需要将消息传递给下一个过滤函数,则在该挂接函数返回前还需要调 用一次CallNextHookEx函数,当需要下载挂接函数时,只须调用一次 UnhookWindowsHookEx函数即可达成。 假如函数是全局性的,那样它需要放在一个.DLL动态链接库中,这个时候该函数调用方 法可以和其它一般.DLL函数一样有三种:
1.在DEF概念文件中直接用函数名或序号说明: EXPORTS WEP @1 RESIDENTNAME InitHooksDll @2 InstallFilter @3 KeyboardProc @4 用序号说明格式为:链接库名.函数名。
2.在应用程序中借助函数直接调用: 第一在应用程序中借助LoadLibrary将动态链接库装入,并获得 装载库模块句柄hInst,然后直接借助GetProcAddress获得函数地址,然后直接调用该地址即可,程序结束前借助函数 FreeLibrary释放装入的动态链接库即可。
3.借助输入库.LIB办法 借助IMPLIB.EXE程序在打造动态链接库的同时打造相应的输入库.LIB,然后直接在 项目文件中增加该输入库。

3、WINDOWS挂钩监控函数的达成步骤 WINDOWS挂钩函数只有放在动态链接库DLL中才能达成所有事件的监控功能。在.DLL 中形成挂钩监控函数基本办法及其基本结构如下:

1、第一声明DLL中的变量和过程;

2、然后编制DLL主模块LibMain,打造模块实例;

3、打造系统退出DLL机制WEP函数;

4、完成DLL初始化函数InitHooksDll,传递主窗口程序句柄;

5、编制挂钩安装和下载函数InstallFilter;

6、编制挂钩函数KeyboardProc,在其中设置监控功能,并确定继续调下一个钩 子函数还是直接返回WINDOWS应用程序。

7、在WINDOWS主程序中需要初始化DLL并安装相应挂钩函数,由挂接的钩子函数负 责与主程序通信;

8、在无需监控时由下载功能卸掉挂接函数。

4、WINDOWS下键盘挂钩监控函数的应用技术 现在标准的104 键盘上都有两个特殊的按键,其上分别用WINDOW程序徽标和鼠标下 拉列表标识,本文暂且分别称为Micro左键和Micro右键,前者用来模拟鼠标左键激 活开始菜单,后者用来模拟鼠标右键激活属性菜单。这两个特殊按键只有在按下后 立即抬起即完成 CLICK过程才能达成其功能,并且没和其它按键进行组合用。 因为WINDOWS 系统中将按键划分得愈加详细,使应用程序中非常难灵活概念我们的专 用快捷键,譬如在开发.IME等应用程序时非常难找到不与WORD8.0等其它应用程序冲突 的功能按键。假如将标准104键盘中的这两个特殊按键作为模拟CTRL和ALT 等专用按 键,使其和其它按键组合,就可以在我们的应用程序中自由地设置专用功能键,为 应用程序达成各种功能快捷键提供灵活性。正常状况下WINDOWS 键盘事件驱动程序 并不将这两个按键的消息进行正常讲解,这就需要借助键盘事件的挂钩监控函数来 达成其特定的功能。其办法如下:

1、第一编制如下一个容易动态链接库程序,并编译成DLL文件。 #include "windows.h"
int FAR PASCAL LibMain;
int WINAPI WEP;
int WINAPI InitHooksDll;
int WINAPI InstallFilter;
LRESULT CALLBACK KeyHook;
static HANDLE hInstance; // 全局句柄
static HWND hWndMain; // 主窗口句柄
static int InitCalled=0; // 初始化标志
static HHOOK hKeyHook;
FARPROC lpfnKeyHook=KeyHook;
BOOL HookStates=FALSE;
int FAR PASCAL LibMain
{
if
UnlockData;
hInstance = hModule;
return 1;
}
int WINAPI WEP
{ return 1;}
int WINAPI InitHooksDll
{
hWndMain = hwndMainWindow;
InitCalled = 1;
return ;
}

[1][2]下一页

 
打赏
 
更多>同类资讯
0相关评论

推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报