如果当焦点处于其他应用程序时,如何拦截键盘事件?

如果当焦点处于其他应用程序时,如何拦截键盘事件?,第1张

WINDOWS的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接 各种反调函数(HOOK)的功能。这种挂钩函数(HOOK)类似扩充中断驱动程序,挂稿帆钩上 可以挂接多个反调函数构成一个挂接函数链。系统产生的各种消息首先被送到各种 挂接函数,挂接函数根据各自的功能对消息进行监视、修改和控制等,然后交还控 制权或将消息传递给下一个挂接函数以致最终达到窗口函数。WINDOW系统的这种反 调函数挂接方法虽然会略加影响到系统的运行效率,但在很多场合下是非常有用 的,通过合理有效地利用键盘事件的挂钩函数监控机制可以达到预想不到的良好效 果。

一、在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( int nCode,WORD wParam,DWORD lParam) 其中KeyboardProc为定义挂接函数名,该函数必须在模块定义文件中利用EXPORTS命 令进行说明;nCode决定挂接函数是否对当前消息进行处理;wParam和lParam为具体 的消息内容。

二、键盘事件挂接函数的安装与下载 在程序中可以睁敬蠢利用函数SetWindowsHookEx()来挂接过滤函数,在挂接函数时必须指 出该挂接函数的类型、函数的入口地址以及函数是全局性的还是局部性的,挂接函 数的具体调用格式如下:

SetWindowsHookEx(iType,iProc,hInst,iCode) 其中iType为挂接函数类型,键盘类型为WH_KEYBOARD,iProc为挂接函数地址,hInst 为挂接函数链接库实例句柄,iCode为监控代码-0表示全局性函数。 如果挂接函数需要将消息传递给下一个过滤函数,则在该挂接函数返回前还需要调 用一次CallNextHookEx()函数,当需要下载挂接函数时,只要调用一次 UnhookWindowsHookEx(iProc)函数即可实现。 如果函数是全局性的,那么它必须放在一个.DLL动态链接库中,这时该函数调用方 法可以和其它普通.DLL函数一样有三种:

1.在DEF定义文件中直接用函数名或序号说明: EXPORTS WEP @1 RESIDENTNAME InitHooksDll @2 InstallFilter @3 KeyboardProc @4 用序号说明格式为:链接库名.函数名(如本例中说明方法为KEYDLL.KeyboardProc)。

2.在应用程序中利用函数直接调用: 首先在应用程序中利用LoadLibrary(LPSTR "链接库名")将动态链接库装入,并取得 装载库模块句柄hInst,然后直接利用GetProcAddress(HINSTANCE hInst,LPSTR "函 数过程名")获取函数地址,然后直接调用该地址即可,程序结束前利用函数 FreeLibrary( )释放装入的动态链接库即可。

3.利用输入库.LIB方法 利用IMPLIB.EXE程序在建立动态链接库的同时建立相应的输入库.LIB,然后直接在 项目文件中增加该输入库。

具体 *** 作步骤如下:

1、首先,打开计算机,在C盘中找到Program

 Files文件夹,点击打开,如下图所示,然后进入下一步。

2、其次,打开Internet

 Explorer文件夹,如下图所示,然后进入下一步。

3、接着,找到iexplorer.exe程序。如下图所示,然后进入下一步。

4、然后,右键单击该应用程序,在d出窗口中,选择安全选项卡,滚哪单击计算机系统的当前登录用户,然后单击右下角的“编辑”按钮,如下图所示,然后进入下一步。

5、随后,找到计算机系统的当前大燃码登录用户,然后再次单击“编辑”,如下图所示,然后进入下一步段掘。

6、接着,将users的权限更改为“拒绝”,如下图所示,然后进入下一步。

7、最后,单击确定,这样IE浏览器就不会受到其他软件的干扰自动d出窗口了,如下图所示。这样,问题就解决了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12541903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存