利用底层键盘钩子拦载任意按键(回调版)_第1页
利用底层键盘钩子拦载任意按键(回调版)_第2页
利用底层键盘钩子拦载任意按键(回调版)_第3页
利用底层键盘钩子拦载任意按键(回调版)_第4页
利用底层键盘钩子拦载任意按键(回调版)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用默认键盘挂钩阻止键(回调版本)-是的-是的发行日期:2007年1月12日来源:goodname008的博客作者:Lu peipei(goodname 008)编辑者输入:webmaster不久前,我写了利用底层键盘钩子屏蔽任意按键篇并在我的博客上发表。在这篇文章的标题中,把“阻止”改为“阻止”,显然比以前的版本好一些。对以前使用的DLL实施屏蔽是不够的。要在屏蔽之前添加“小行为”,可以只修改DLL,向LowLevelKeyboardProc函数添加代码以实现新功能。但是好像缺乏灵活性。DLL不具有一般性。所以我自然而然地想到了回调。Windows上有许多需要回调函数的API,当然,您也可以编写这些API。这样做的好处是可以在DLL寻呼机上留下足够的接口。此时,DLL就像一个阀门,只保留不感兴趣的密钥信息,截取我们关心的密钥信息,进一步处理。这些处理代码被写入DLL调用程序的回调函数中,因此非常理想。与早期版本相关的已修改DLL源代码如下:/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */*文件名: maskey . CPP */* */*功能:标准DLL -使用默认键盘挂钩拦截键盘*/* */*作者: Lu peipei(goodname 008)时间: 2005.1.18 */* */* blog : http:/blog . csdn . net/good name 008 */* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */导出函数列表/startmaskey/stopmasskey#define _WIN32_WINNT0x0500 /设定系统版本以使用预设键盘挂接# include“windows . h”/回调函数指针type def bool(callback * lpfn keyboard proc)(WP aram,kbdllhelookstruct *);/全局变量LPDWORD g _ lpdwVirtualKey=NULL/Keycode阵列的指标int g _ nLength=0;/Keycode阵列的大小BOOL g _ bDisableKeyboard=FALSE/是否遮罩整个键盘HINSTANCE g _ hInstance=NULL/模块实例句柄HHOOK g _ hHook=NULL/弯钩句柄lpfn keyboard proc g _ lpfn keyboard proc;/键盘挂接回调函数指针/DLL条目函数bool apipentry dll man(handle hmodule,dwordul _ reason _ for _ call,lpvoid lpreserved)/存储模块实例句柄g _ hInstance=(hInstance)hm odule;/在进程结束或线程结束时卸载挂接交换机(ul_reason_for_call)Case DLL_PROCESS_ATTACH:BreakCase DLL_THREAD_ATTACH:BreakCase DLL_PROCESS_DETACH:Case DLL_THREAD_DETACH:free(g _ lpdwVirtualKey);If (g_hHook!=null)unhookwindowshookex(g _ hhook);BreakReturn TRUE/预设键盘挂接函数lresult callback low level keyboard proc(intncode、wparam wparam、lpram lpararam)/如果截断键盘上的某些键,则g_bDisableKeyboard为TRUE,这将截断整个键盘键If (nCode=HC_ACTION)kbdllhelkstruct * pstruct=(kbdllhelookstruct *)lpram;If (g_bDisableKeyboard)If (g _ lpfn keyboardproc (wparam,pstruct)Return callnexthop (g _ hhook,ncode,wparam,lpram);ElseReturn trueLP dword tmpvirtualkey=g _ lpdwvirtualkey;for(int I=0);I g _ nLengthI)If (pstruct-vk代码=* tmpvirtualkey)If (g _ lpfn keyboardproc (wparam,pstruct)Return callnexthop (g _ hhook,ncode,wparam,lpram);ElseReturn true/调用系统的以下挂接Return callnexthop (g _ hhook,ncode,wparam,lpram);/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */*键盘键终止点开始*/* */*参数: */*指向lpdwVirtualKey Keycode数组的指针*/* nLength Keycode阵列的大小*/* bDisableKeyboard是否截取整个键盘*/* */*返回值: TRUE成功,FALSE失败*/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *bool winapi startmaskey(LP dword lpdwvirtualkey,int nlength,lpfn keyboard proc lpfn keyboard proc,bool bdisablekeyboard=false)/如果已安装键盘挂接,则返回FALSEIf (g_hHook!=NULL | | n length=0)return FALSE;/将用户发送的keycode数组存储在全局变量中g _ lpdwvirtualkey=(LP dword)malloc(sizeof(dword)* n length);LP dword tmpvirtualkey=g _ lpdwvirtualkey;for(int I=0);I nLengthI)* tmpVirtualKey=* lpdwVirtualKey;G _ nLength=nLengthg _ bdisable keyboard=bdisable keyboard;g _ lpfn keyboard proc=lpfn keyboard proc;/安装预设键盘挂接g _ hhook=setwindowsshookex(wh _ keyboard _ ll,low level keyboardproc,g _ hinstance,null);if(g _ hHook=NULL)return FALSE;Return TRUE/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */*停止拦截键盘键*/* */*参数:(无)*/* */*返回值: TRUE成功,FALSE失败*/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *BOOL WINAPI StopMaskKey()/卸载挂接if(unhookwindowshookex(g _ hhook)=0)return false;G _ hHook=NULLReturn TRUE当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论