首页 > 编程知识 正文

钩子函数监控键盘(windows用键盘打勾)

时间:2023-05-04 17:09:51 阅读:72112 作者:3692

众所周知,消息传递在Windows系统中起着非常重要的作用。 另一方面,挂接是一种特殊工具,可以拦截指定窗口中的消息,然后处理消息或直接传递到下一层而不处理消息。

这个程序分为两个部分。

1.KeyboardHook.dll负责对指定窗口下的挂接执行删除挂接等操作。

2.KeyboardHookTest调用上述动态链接库,并提供交互式操作接口。

正文:

1.KeyboardHook.dll

1.1 SetHook (下挂钩程序) )

voidsethook(dworddwthreadid ) hmodulemod=getmodulehandle ) (keyboardhookdll.dll ); //当前DLL模块句柄g _ hkeyboardhook=setwindowshookex (wh _ keyboard _ ll,LowLevelKeyboardProc,mod,0 ); g_dwThreadID=dwThreadID; }代码分析:

SetWindowsHookEx原型

hookwinapisetwindowshookex (_ in _ intid hook,_In_ HOOKPROC lpfn,_In_ HINSTANCE hMod,_In_ DWORD dwThreadId )

第二个参数是挂接的回调函数

第三个参数是第二个参数表示的回调函数所在的动态链接库的句柄

第四个参数线程标识符。 0时为全局挂钩

1.2回调函数

lesultcallbacklowlevelkeyboardproc (int ncode,WPARAM wParam, 将LPARAM lParam )//键释放为单个键值if(WM_keyup===wparam ) kbdaram的postthreadmessage(g_dwthreadid,WM _ globbam } returncallnexthookex (g _ hkeyboardhook,nCode,wParam,lParam ); }wParam和lParam是消息的两个参数,指示消息的类型。

密钥上升时发送自定义消息,并在KeyboardHookTest中处理消息。

1.3删除手册

voiddeletehook ((unhookwindowshookex ) g_hkeyboardhook ); }2.KeyboardHookTest

2.1主程序

int_tmain(intargc,TCHAR* argv[],TCHAR* envp[] ) {int nRetCode=0; show window (获取控制台窗口)、SW_HIDE ); //隐藏窗口sethook(getcurrentthreadid (); MSG msg; char content[16]={0}; int a=0; while(true ) if ) peekmessage(msg,NULL,NULL,PM_REMOVE ) ) if ) WM _ global keyboard==msg.message sprind writefile(L'C:(test2.txt ',content,3 ); }}}DeleteHook (; 返回n记录码; }启动程序-隐藏窗口-下挂钩-获取键盘消息按ASCII值保存文件,ESC退出并删除挂钩

2.2写入文件

正文结束。

资源链接: http://download.csdn.net/download/Jupiter 37/9435162

注意:这个链接是原始程序,本文是在改造的程序中描述的,并不完全一致,大致相同,读者自己理解。

编程环境win7 64位、vs2010

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。