首页
社区
课程
招聘
[原创]发一个键盘记录器--附源码
发表于: 2006-12-10 18:37 194039

[原创]发一个键盘记录器--附源码

2006-12-10 18:37
194039

用的是Raw Input的相关方法,基本上原始的键盘输入都能够读出来。

关于Raw Input请查阅MSDN:)网上有人翻译了中文版本的:http://www.cppblog.com/shenhuafeng/archive/2006/09/15/12530.html

主要流程:
1、向系统注册一个或者多个原始输入设备
2、在你注册的原始输入设备数据发生变化时,系统发送一个消息及新数据到你的进程
3、调用GetRawInputData或者GetRawInputBuffer来获取这些数据

简单修改了下,把一些不需要的信息去掉了,把头文件稍微改了下,因为有些人的SDK有点旧。然后加了当前键盘焦点窗口判断(很简单的实现,但是用起来很方便:)。

具体代码见附件...


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (215)
雪    币: 342
活跃值: (318)
能力值: ( LV12,RANK:740 )
在线值:
发帖
回帖
粉丝
2
学习了。
2006-12-10 20:08
0
雪    币: 381
活跃值: (140)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
3
可以日志钩子的。
2006-12-10 20:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
汗!!!C语言啊
2006-12-10 20:52
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
顶.
2006-12-10 22:18
0
雪    币: 116
活跃值: (220)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
6
不错。。。学习。。。
2006-12-11 09:59
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
7
学习了
2006-12-11 10:28
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
就是帅啊!!!!!!!!!!!
2006-12-11 12:43
0
雪    币: 225
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
简直就是太牛了,键盘消息还可以这样读取!!!!!
2006-12-13 19:20
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PFC
10
学习
2006-12-13 21:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wei
11
不错,学习下

Thanks a lot!
2006-12-14 11:02
0
雪    币: 235
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
程序结构简单明了。。赞~
2006-12-14 13:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
想必只能捕获非控制台的输入
2006-12-15 13:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
--------------------Configuration: KBDLogger - Win32 Debug--------------------
Compiling resources...
Compiling...
KBDLogger.cpp
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(109) : error C2065: 'VK_SLEEP' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(201) : error C2065: 'VK_OEM_1' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(202) : error C2065: 'VK_OEM_PLUS' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(203) : error C2065: 'VK_OEM_COMMA' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(204) : error C2065: 'VK_OEM_MINUS' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(205) : error C2065: 'VK_OEM_PERIOD' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(207) : error C2065: 'VK_OEM_2' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(209) : error C2065: 'VK_OEM_3' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(237) : error C2065: 'VK_OEM_4' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(239) : error C2065: 'VK_OEM_5' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(241) : error C2065: 'VK_OEM_6' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(243) : error C2065: 'VK_OEM_7' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(245) : error C2065: 'VK_OEM_8' : undeclared identifier
d:\06-11-6以后下载的资料\一个键盘记录器\kbdlogger\vkey.h(248) : error C2065: 'VK_OEM_102' : undeclared identifier
rawinput.cpp
Error executing cl.exe.

KBDLogger.exe - 14 error(s), 0 warning(s)
2006-12-15 13:44
0
雪    币: 297
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
15
楼上,没试怎么知道。
虽然我肯定该方法可以做到这一点,但是为了推翻楼上的判断,还是在控制台下试了下,我按了六个键,结果如下:
[D:\WINDOWS\system32\cmd.exe]:A
[D:\WINDOWS\system32\cmd.exe]:A
[D:\WINDOWS\system32\cmd.exe]:C
[D:\WINDOWS\system32\cmd.exe]:C
[D:\WINDOWS\system32\cmd.exe]:D
[D:\WINDOWS\system32\cmd.exe]:D
ctrl + alt +del,键盘上的快速功能键也可以。
2006-12-15 13:53
0
雪    币: 297
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
16
这里你可以全部按照enum的默认值来重新更换未定义的值。
从0x0 - 0xff
2006-12-15 13:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
C语言啊写的啊。学习了。呵呵
2006-12-15 14:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
强...赞...
2006-12-15 17:17
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好方法!

可惜不支持 win2000和win98。

可惜不支持捕获QQ密码框中的输入。
2006-12-15 21:49
0
雪    币: 297
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
20
晕,又一个看帖子不仔细的。。。
2000和98没有试过,但是在xp下,qq输入也是可以获取的,哎。
[QQ用户登录]:Numeric keypad 1 key
[QQ用户登录]:Numeric keypad 2 key
[QQ用户登录]:Numeric keypad 3 key
[QQ用户登录]:Numeric keypad 4 key
[QQ用户登录]:Numeric keypad 5 key
[QQ用户登录]:Numeric keypad 6 key
[QQ用户登录]:Numeric keypad 7 key
[QQ用户登录]:Numeric keypad 8 key
[QQ用户登录]:Numeric keypad 9 key
[QQ用户登录]:ENTER key
要仔细看msdn啊。
2006-12-15 22:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nsd
21
学习了,呵呵!!!
2006-12-16 15:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
最初由 默数悲伤 发布
楼上,没试怎么知道。
虽然我肯定该方法可以做到这一点,但是为了推翻楼上的判断,还是在控制台下试了下,我按了六个键,结果如下:
[D:\WINDOWS\system32\cmd.exe]:A
[D:\WINDOWS\system32\cmd.exe]:A
[D:\WINDOWS\system32\cmd.exe]:C
........


兄弟,消消火。
我只是没有运行成功你的代码。
环境:
XP SP2
VC6
还装有VS2003
2006-12-17 10:01
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
不错,下来试试
2006-12-23 10:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
最初由 默数悲伤 发布
晕,又一个看帖子不仔细的。。。
2000和98没有试过,但是在xp下,qq输入也是可以获取的,哎。
[QQ用户登录]:Numeric keypad 1 key
[QQ用户登录]:Numeric keypad 2 key
[QQ用户登录]:Numeric keypad 3 key
........

下载测试了一下,XP sp2环境
1、cmd下的输入是可以获取的;
2、qq登录密码框中的输入获取的不对,字符显示全是A,数字全部是1,呵呵
[QQ用户登录]:A
[QQ用户登录]:A
[QQ用户登录]:1
[QQ用户登录]:1
[QQ用户登录]:1
[QQ用户登录]:1
[QQ用户登录]:1
2006-12-23 10:51
0
雪    币: 297
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
25
最初由 nipcdll 发布
下载测试了一下,XP sp2环境
1、cmd下的输入是可以获取的;
2、qq登录密码框中的输入获取的不对,字符显示全是A,数字全部是1,呵呵
[QQ用户登录]:A
[QQ用户登录]:A
........


看我的,不知道为什么会发生楼上的状况:
[QQ用户登录]:C
[QQ用户登录]:C
[QQ用户登录]:D
[QQ用户登录]:D
[QQ用户登录]:E
[QQ用户登录]:F
[QQ用户登录]:G
[QQ用户登录]:1
[QQ用户登录]:2
[QQ用户登录]:3
[QQ用户登录]:4

是不是qq版本不同的呀
2006-12-23 11:42
0
游客
登录 | 注册 方可回帖
返回
//