欢迎来到天天文库
浏览记录
ID:6569456
大小:48.00 KB
页数:13页
时间:2018-01-18
《利用底层键盘钩子拦载任意按键(回调版)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、利用底层键盘钩子拦载任意按键(回调版).txt明骚易躲,暗贱难防。佛祖曰:你俩就是大傻B!当白天又一次把黑夜按翻在床上的时候,太阳就出生了利用底层键盘钩子拦载任意按键(回调版)--------------------------------------------------------------------------------发表日期:2007年1月12日出处:goodname008的Blog作者:卢培培((goodname008)【编辑录入:webmaster】前段时间我曾经写过一篇《利用底层键盘钩子屏蔽任意按键》,并放到了我的blog上。这
2、篇文章的题目中把“屏蔽”改成了“拦截”,显然要比以前的版本强一些了。对于以前写的那个DLL,有一个不够理想的地方,就是仅仅能实现屏蔽。如果想在屏蔽之前加入一些“小动作”,就只能修改DLL,在LowLevelKeyboardProc函数中添加代码,实现新的功能。但这样显然不够灵活,这样的DLL也不具备一般性了。所以我自然而然地想到了回调,Windows中有很多需要回调函数的API,我们当然也可以写出这样的API,这样做的好处就是可以给DLL调用程序留下足够的接口。此时,DLL就像一个阀门,我们不关心的按键消息就把它放过去,只把我们关心的按键消息拦截下来,
3、然后进一步处理,而这些处理的代码就写在DLL调用程序的回调函数中,这样做是最理想不过的了。相对于前一个版本,修改后的DLL源代码如下:/********************************************************************//*文件名:MaskKey.cpp*//**//*功能:标准DLL----利用底层键盘钩子实现拦截键盘任意按键*//**//*作者:卢培培(goodname008)时间:2005.1.18*//**//*BLOG:http://blog.csdn.net/goodname008*//
4、********************************************************************///导出函数列表//StartMaskKey//StopMaskKey#define_WIN32_WINNT0x0500//设置系统版本,确保可以使用底层键盘钩子#include"windows.h"//回调函数指针typedefBOOL(CALLBACK*LPFNKEYBOARDPROC)(WPARAM,KBDLLHOOKSTRUCT*);//全局变量LPDWORDg_lpdwVirtualKey=NULL;//K
5、eycode数组的指针intg_nLength=0;//Keycode数组的大小BOOLg_bDisableKeyboard=FALSE;//是否屏蔽整个键盘HINSTANCEg_hInstance=NULL;//模块实例句柄HHOOKg_hHook=NULL;//钩子句柄LPFNKEYBOARDPROCg_lpfnKeyboardProc;//键盘钩子回调函数指针//DLL入口函数BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){//保存模块实例句柄
6、g_hInstance=(HINSTANCE)hModule;//在进程结束或线程结束时卸载钩子switch(ul_reason_for_call){caseDLL_PROCESS_ATTACH:break;caseDLL_THREAD_ATTACH:break;caseDLL_PROCESS_DETACH:caseDLL_THREAD_DETACH:free(g_lpdwVirtualKey);if(g_hHook!=NULL)UnhookWindowsHookEx(g_hHook);break;}returnTRUE;}//底层键盘钩子函数LRES
7、ULTCALLBACKLowLevelKeyboardProc(intnCode,WPARAMwParam,LPARAMlParam){//拦截键盘的某些按键,如果g_bDisableKeyboard为TRUE则拦截整个键盘按键if(nCode>=HC_ACTION){KBDLLHOOKSTRUCT*pStruct=(KBDLLHOOKSTRUCT*)lParam;if(g_bDisableKeyboard)if(g_lpfnKeyboardProc(wParam,pStruct))returnCallNextHookEx(g_hHook,nCode,
8、wParam,lParam);elsereturntrue;LPDWORDtmpVirtual
此文档下载收益归作者所有