欢迎来到天天文库
浏览记录
ID:6680216
大小:46.50 KB
页数:20页
时间:2018-01-22
《利用底层键盘钩子拦载任意按键(回调版)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、利用底层键盘钩子拦载任意按键(回调版)利用底层键盘钩子拦载任意按键(回调版).txt跌倒了,爬起来再哭~~~低调!才是最牛B的炫耀!!不吃饱哪有力气减肥啊?真不好意思,让您贱笑了。我能抵抗一切,除了诱惑……老子不但有车,还是自行的……利用底层键盘钩子拦载任意按键(回调版)--------------------------------------------------------------------------------发表日期:2007年1月12日出处:goodname008的Blog作者:卢培培((goodname008)【编辑录入:webmaster】前段时间我曾经写
2、过一篇《利用底层键盘钩子屏蔽任意按键》,并放到了我的blog上。这篇文章的题目中把“屏蔽”改成了“拦截”,显然要比以前的版本强一些了。对于以前写的那个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;//Keycode数组的指针i
5、ntg_nLength=0;//Keycode数组的大小BOOLg_bDisableKeyboard=FALSE;//是否屏蔽整个键盘HINSTANCEg_hInstance=NULL;//模块实例句柄HHOOKg_hHook=NULL;//钩子句柄LPFNKEYBOARDPROCg_lpfnKeyboardProc;//键盘钩子回调函数指针//DLL入口函数BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){//保存模块实例句柄g_hInstance=(HINSTANCE)hMod
6、ule;//在进程结束或线程结束时卸载钩子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;}//底层键盘钩子函数LRESULTCALLBACKLowLevelKeyboardProc(intnCode,W
7、PARAMwParam,LPARAMlParam){//拦截键盘的某些按键,如果g_bDisableKeyboard为TRUE则拦截整个键盘按键if(nCode>=HC_ACTION){KBDLLHOOKSTRUCT*pStruct=(KBDLLHOOKSTRUCT*)lParam;if(g_bDisableKeyboard)if(g_lpfnKeyboardProc(wParam,pStruct))returnCallNextHookEx(g_hHook,nCode
此文档下载收益归作者所有