PS2键盘和USB键盘编码表

PS2键盘和USB键盘编码表
PS2键盘和USB键盘编码表

PS2键盘编码

USB键盘编码

这是从USB HID应用手册里面截选出来的一段。

实际上常用的也就前面的几项,比如

83 53 Keypad Num Lock and Clear11 90 √√√ 101/104

83是键值的10进制编码,53是键值的16进制编码,然后

Keypad Num Lock and Clear的意思是小键盘(数字键盘)锁按键

再比如20 14 Keyboard q and Q4 17 √√√ 4/101/104

20也是键q的十进值编码,14是十六进制编码,后面注释是字母q或Q的编码。

0 00 Reserved (no event indicated)9 N/A √√√4/101/104

1 01 Keyboard ErrorRollOver9 N/A √√√4/101/104

2 02 Keyboard POSTFail9 N/A √√√4/101/104

3 03 Keyboard ErrorUndefined9 N/A √√√4/101/104

4 04 Keyboard a and A4 31 √√√4/101/104

5 05 Keyboard b and B 50 √√√4/101/104

6 06 Keyboard c and C4 48 √√√4/101/104

7 07 Keyboard d and D 33 √√√4/101/104

8 08 Keyboard e and E 19 √√√4/101/104

9 09 Keyboard f and F 34 √√√4/101/104

10 0A Keyboard g and G 35 √√√4/101/104

11 0B Keyboard h and H 36 √√√4/101/104

12 0C Keyboard i and I 24 √√√4/101/104

16 10 Keyboard m and M4 52 √√√4/101/104

17 11 Keyboard n and N 51 √√√4/101/104

18 12 Keyboard o and O4 25 √√√4/101/104

19 13 Keyboard p and P4 26 √√√4/101/104

20 14 Keyboard q and Q4 17 √√√4/101/104

21 15 Keyboard r and R 20 √√√4/101/104

22 16 Keyboard s and S4 32 √√√4/101/104

23 17 Keyboard t and T 21 √√√4/101/104

24 18 Keyboard u and U 23 √√√4/101/104

25 19 Keyboard v and V 49 √√√4/101/104

26 1A Keyboard w and W4 18 √√√4/101/104

27 1B Keyboard x and X4 47 √√√4/101/104

28 1C Keyboard y and Y4 22 √√√4/101/104

29 1D Keyboard z and Z4 46 √√√4/101/104

30 1E Keyboard 1 and !4 2 √√√4/101/104

31 1F Keyboard 2 and @4 3 √√√4/101/104

32 20 Keyboard 3 and #4 4 √√√4/101/104

33 21 Keyboard 4 and $4 5 √√√4/101/104

34 22 Keyboard 5 and %4 6 √√√4/101/104

35 23 Keyboard 6 and ^4 7 √√√4/101/104

36 24 Keyboard 7 and &4 8 √√√4/101/104

37 25 Keyboard 8 and *4 9 √√√4/101/104

38 26 Keyboard 9 and (4 10 √√√4/101/104

39 27 Keyboard 0 and )4 11 √√√4/101/104

40 28 Keyboard Return (ENTER)5 43 √√√4/101/104

41 29 Keyboard ESCAPE 110 √√√4/101/104

42 2A Keyboard DELETE (Backspace)13 15 √√√4/101/104

43 2B Keyboard Tab 16 √√√4/101/104

44 2C Keyboard Spacebar 61 √√√4/101/104

45 2D Keyboard - and (underscore)4 12 √√√4/101/104

46 2E Keyboard = and +4 13 √√√4/101/104

47 2F Keyboard [ and {4 27 √√√4/101/104

48 30 Keyboard ] and }4 28 √√√4/101/104

49 31 Keyboard \ and | 29 √√√4/101/104

50 32 Keyboard Non-US # and ~2 42 √√√4/101/104

51 33 Keyboard ; and :4 40 √√√4/101/104

52 34 Keyboard ‘ and “4 41 √√√4/101/104

53 35 Keyboard Grave Accent and Tilde4 1 √√√4/101/104

54 36 Keyboard, and <4 53 √√√4/101/104

55 37 Keyboard . and >4 54 √√√4/101/104

56 38 Keyboard / and ?4 55 √√√4/101/104

57 39 Keyboard Caps Lock11 30 √√√4/101/104

58 3A Keyboard F1 112 √√√4/101/104

59 3B Keyboard F2 113 √√√4/101/104

60 3C Keyboard F3 114 √√√4/101/104

61 3D Keyboard F4 115 √√√4/101/104

65 41 Keyboard F8 119 √√√4/101/104

66 42 Keyboard F9 120 √√√4/101/104

67 43 Keyboard F10 121 √√√4/101/104

68 44 Keyboard F11 122 √√√101/104

69 45 Keyboard F12 123 √√√101/104

70 46 Keyboard PrintScree n1 124 √√√101/104

71 47 Keyboard Scroll Lock11 125 √√√4/101/104

72 48 Keyboard Pause1 126 √√√101/104

73 49 Keyboard Insert1 75 √√√101/104

74 4A Keyboard Home1 80 √√√101/104

75 4B Keyboard PageUp1 85 √√√101/104

76 4C Keyboard Delete Forward1;14 76 √√√101/104

77 4D Keyboard End1 81 √√√101/104

78 4E Keyboard PageDown1 86 √√√101/104

79 4F Keyboard RightArrow1 89 √√√101/104

80 50 Keyboard LeftArrow1 79 √√√101/104

81 51 Keyboard DownArrow1 84 √√√101/104

82 52 Keyboard UpArrow1 83 √√√101/104

83 53 Keypad Num Lock and Clear11 90 √√√101/104

84 54 Keypad /1 95 √√√101/104

85 55 Keypad * 100 √√√4/101/104

86 56 Keypad - 105 √√√4/101/104

87 57 Keypad + 106 √√√4/101/104

88 58 Keypad ENTER5 108 √√√101/104

89 59 Keypad 1 and End 93 √√√4/101/104

90 5A Keypad 2 and Down Arrow 98 √√√4/101/104

91 5B Keypad 3 and PageDn 103 √√√4/101/104

92 5C Keypad 4 and Left Arrow 92 √√√4/101/104

93 5D Keypad 5 97 √√√4/101/104

94 5E Keypad 6 and Right Arrow 102 √√√4/101/104

95 5F Keypad 7 and Home 91 √√√4/101/104

96 60 Keypad 8 and Up Arrow 96 √√√4/101/104

97 61 Keypad 9 and PageUp 101 √√√4/101/104

98 62 Keypad 0 and Insert 99 √√√4/101/104

99 63 Keypad . and Delete 104 √√√4/101/104

100 64 Keyboard Non-US \ and |3;6 45 √√√4/101/104 101 65 Keyboard Application10 129 √√104

102 66 Keyboard Power9 √√

103 67 Keypad = √

104 68 Keyboard F13 √

105 69 Keyboard F14 √

106 6A Keyboard F15 √

107 6B Keyboard F16

108 6C Keyboard F17

109 6D Keyboard F18

110 6E Keyboard F19

114 72 Keyboard F23

115 73 Keyboard F24

116 74 Keyboard Execute √

117 75 Keyboard Help √

118 76 Keyboard Menu √

119 77 Keyboard Select √

120 78 Keyboard Stop √

121 79 Keyboard Again √

122 7A Keyboard Undo √

123 7B Keyboard Cut √

124 7C Keyboard Copy √

125 7D Keyboard Paste √

126 7E Keyboard Find √

127 7F Keyboard Mute √

128 80 Keyboard Volume Up √

129 81 Keyboard Volume Down √

130 82 Keyboard Locking Caps Lock12 √131 83 Keyboard Locking Num Lock12 √132 84 Keyboard Locking Scroll Lock12 √133 85 Keypad Comma27 107

134 86 Keypad Equal Sign29

135 87 Keyboard International115,28 56 136 88 Keyboard International216

137 89 Keyboard International317

138 8A Keyboard International418

139 8B Keyboard International519

140 8C Keyboard International620

141 8D Keyboard International721

142 8E Keyboard International822

143 8F Keyboard International922

144 90 Keyboard LANG125

145 91 Keyboard LANG226

146 92 Keyboard LANG330

147 93 Keyboard LANG431

148 94 Keyboard LANG532

149 95 Keyboard LANG68

150 96 Keyboard LANG78

151 97 Keyboard LANG88

152 98 Keyboard LANG98

153 99 Keyboard Alternate Erase7

154 9A Keyboard SysReq/Attention1 155 9B Keyboard Cancel

156 9C Keyboard Clear

157 9D Keyboard Prior

158 9E Keyboard Return

159 9F Keyboard Separator

163 A3 Keyboard CrSel/Props 164 A4 Keyboard ExSel

165-175 A5-CF Reserved

176 B0 Keypad 00

177 B1 Keypad 000

178 B2 Thousands Separator 33 179 B3 Decimal Separator 33 180 B4 Currency Unit 34

181 B5 Currency Sub-unit 34

182 B6 Keypad (

183 B7 Keypad )

184 B8 Keypad {

185 B9 Keypad }

186 BA Keypad Tab

187 BB Keypad Backspace

188 BC Keypad A

189 BD Keypad B

190 BE Keypad C

191 BF Keypad D

192 C0 Keypad E

193 C1 Keypad F

194 C2 Keypad XOR

195 C3 Keypad ^

196 C4 Keypad %

197 C5 Keypad <

198 C6 Keypad >

199 C7 Keypad &

200 C8 Keypad &&

201 C9 Keypad |

202 CA Keypad ||

203 CB Keypad :

204 CC Keypad #

205 CD Keypad Space

206 CE Keypad @

207 CF Keypad !

208 D0 Keypad Memory Store 209 D1 Keypad Memory Recall 210 D2 Keypad Memory Clear 211 D3 Keypad Memory Add 212 D4 Keypad Memory Subtract 213 D5 Keypad Memory Multiply 214 D6 Keypad Memory Divide 215 D7 Keypad +/-

216 D8 Keypad Clear

217 D9 Keypad Clear Entry

218 DA Keypad Binary

222-223 DE-DF Reserved

224 E0 Keyboard LeftControl 58 √√√4/101/104 225 E1 Keyboard LeftShift 44 √√√4/101/104 226 E2 Keyboard LeftAlt 60 √√√4/101/104 227 E3 Keyboard Left GUI10;23 127 √√√104 228 E4 Keyboard RightControl 64 √√√101/104 229 E5 Keyboard RightShift 57 √√√4/101/104 230 E6 Keyboard RightAlt 62 √√√101/104 231 E7 Keyboard Right GUI10;24 128 √√√104

记一次键盘记录器的编写

新建win32项目 键盘记录器的思路 1.窗口消息处理的框架 一注册窗口类 MyRegisterClass 二实例化并创建窗口 InitInstance 三处理窗口消息 WndProc 2.改造窗口,让它隐藏 3.1 WM_CREATE是窗口创建函数 3.2 WM_DESTROY是窗口关闭函数 建立之初,程序默认窗口是显示的,所以会建立一个ShowWindow(hWnd, nCmdShow); 我们要让他隐藏,那就要改第二个参数ShowWindow(hWnd, SW_HIDE); 3.让这个程序运行起来了就开始监控按键操作,程序结束了就结束监控. 那么我们怎么知道程序什么时刻运行起来了呢,我们是根据其窗口的创建与关闭来判断 在建立项目之初,他没有帮我们写WM_CREATE函数,所以在处理窗口消息部分WndProc 中写入case WM_CREATE: …………………… //这一部分就是窗口建立之后所运行的程序,我们在这一部分就

开始 //写我们所要实现的记录功能,我们称之为钩子函数。 以下为建立钩子程序 这个函数我们要在解决方案里重新新建一个空项目keyhook,后选择动态程序dll(动态加载,而不是 直接运行),实现这个功能,我们只要在这里调用函数即可 在建立keyhook项目完成后要新建一个头文件和cpp文件,来实现钩子的功能 接下来在头文件自己定义两个函数来启动钩子bool installhook(); 和关闭钩子bool uninstallhook(); 并且复制到cpp文件中, 注意:要让其他文件用到这两个函数,必须要在头文件中将两个函数改写成 extern"C"_declspec(dllexport) bool installhook(); “C”是指这是c语言代码 _declspec是一个函数 dllexport参数是动态库导出 要在键盘记录器的cpp文件中使用这两个函数,所以要包含其头文件,注意,由于所要包含的是一个动态库,所以是#pragma comment(lib,"keyhook"),而不是以前的#include,除此之外还要导入动态库中的函数,也就是将函数在声明一遍,记住要改dllexport成dllimport,因为这是导入,不是导出,如下 #pragma comment(lib,"keyhook")//导入动态库 //导入动态库中的函数 //启动钩子 extern"C"_declspec(dllimport) bool installhook(); //自己定义的函数 //关闭钩子 extern"C"_declspec(dllimport) bool uninstallhook(); 然后就开始写钩子程序 要实现以下功能 //获取用户的按键消息 用到SetWindowsHookEx函数,要包含Windows.h的头文件 SetWindowsHookEx(WH_KEYBOARD,keyProc,GetModuleHandle(L"keyhook"),NULL); 第一个参数代表的是我们要获取键盘的消息 第二个参数就是自己定义的函数,就是监控这个消息之后你要做什么事情(在这里就是同时获取当前窗口的标题并同时获取当前按下的按键文本并保存到文件中),这个函数的类型是HOOKPROC,按下F12后是typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam); 在这里我们定义这个函数为keyProc来实现这两个功能但我们得要在头文件中声明这个函数,然后才能在cpp文件中使用 这个功能用如下程序来实现 LRESULT CALLBACK keyProc(int code, WPARAM wParam, LPARAM lParam){ char szWriteText[256]; //用来保存标题和文本 char szWindowTitle[256]; //保存标题 char szKeyText[256]; //保存文本 //并同时获取当前窗口的标题

按键精灵键盘对应代码

按键精灵后台键盘对应代码104键键盘按键码对照 ★主键盘区 A → 65 B → 66 C → 67 D → 68 E → 69 F → 70 G → 71 H → 72 I → 73 J → 74 K → 75 L → 76 M → 77 N → 78 O → 79 P → 80 Q → 81 R → 82 S → 83

T → 84 U → 85 V → 86 W → 87 X → 88 Y → 89 Z → 90 0 ) → 48 1 ! → 49 2 @ → 50 3 # → 51 4 $ → 52 5 % → 53 6 ^ → 54 7 & → 55 8 * → 56 9 ( → 57 Esc → 27 ` ~ → 192 _-→ 189 = + → 187 \ | → 220

← Back Space → 8 Tab → 9 Caps Lock → 20 Shift → 16 Left Shift → 160 Right Shift → 161 Ctrl → 17 Left Crtl → 162 Right Ctrl → 163 Win → 91 Alt → 18 Letf Alt → 164 Right Alt → 165 空格键Space → 32 Right Mouse → 93 Enter → 13 Macro → 226 [ { → 219 ] } → 221 ; : → 186 ‘ “ → 222 , < → 188

. > → 190 / ? → 191 ★数字键盘区数字键盘0 → 96 数字键盘1 → 97 数字键盘2 → 98 数字键盘3 → 99 数字键盘4 → 100 数字键盘5 → 101 数字键盘6 → 102 数字键盘7 → 103 数字键盘8 → 104 数字键盘9 → 105 Num Lock → 144 / → 111 * → 106 - → 109 + → 107 Enter → 13 . → 110 ★功能键区F1 → 112 F2 → 113 F3 → 114 F4 → 115 F5 → 116 F6 → 117 F7 → 118 F8 → 119 F9 → 120 F10 → 121 F11 → 122 F12 → 123 ★编辑键区Print Screen→ 44 Scroll Lock → 145 Pause Break → 19 Insert → 45 Delete → 46 Home → 36 End → 35 Page Up → 33 Page Down → 34 左箭头→ 37 上箭头→ 38 右箭头→ 39 下箭头→ 40

键盘键与虚拟键码对照表

键盘键与虚拟键码对照表 字母和数字键数字小键盘的键功能键其它键 键键码键键码键键码键键码 A 65 0 96 F1 112 Backspace 8 B 66 1 97 F2 113 Tab 9 C 67 2 98 F3 114 Clear 12 D 68 3 99 F4 115 Enter 13 E 69 4 100 F5 116 Shift 16 F 70 5 101 F6 117 Control 17 G 71 6 102 F7 118 Alt 18 H 72 7 103 F8 119 Caps Lock 20 I 73 8 104 F9 120 Esc 27 J 74 9 105 F10 121 Spacebar 32 K 75 * 106 F11 122 Page Up 33 L 76 + 107 F12 123 Page Down 34 M 77 Enter 108 -- -- End 35

N 78 - 109 -- -- Home 36 O 79 . 110 -- -- Left Arrow 37 P 80 / 111 -- -- Up Arrow 38 Q 81 -- -- -- -- Right Arrow 39 R 82 -- -- -- -- Down Arrow 40 S 83 -- -- -- -- Insert 45 T 84 -- -- -- -- Delete 46 U 85 -- -- -- -- Help 47 V 86 -- -- -- -- Num Lock 144 W 87 X 88 Y 89 Z 90 0 48 1 49 2 50

消息钩子函数入门篇.docx

消息钩子函数入门篇 Windows系统是建立在事件驱动的机制上的,说穿了就 是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词, 日志监视等等。可见,利用钩子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握钩子的编程方法是很有必要的。 钩子的类型 一.按事件分类,有如下的几种常用类型 (1)键盘钩子和低级键盘钩子可以监视各种键盘消 /息、O (2)鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。 (3)外壳钩子可以监视各种Shell事件消息。比如启动和关闭应用程序。 (4)日志钩子可以记录从系统消息队列中取出的各种 事件消息。 (5)窗口过程钩子监视所有从系统消息队列发往目标窗口的

消息。 此外,还有一些特定事件的钩子提供给我们使用,不列举。 下面描述常用的Hook类型: 1、WH_CA LLWNDPROC 和WH_CALLWND PROCRETHoo ks WH_CAL LWNDPROC 和W H_CALLWNDP ROCRETHook s 使你可以监视发送到窗口过程的消息。系统在消息发送到接收窗口过程之前调用WH_C ALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALL WNDPR0 CR ETHook 子程。W H_CALLWNDP ROCRETHook 传递指针到CWPRE TSTRUCT 结构,再传递到Hook 子程。CWPRETSTR UCT 结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。 2、WH_CB THook 在以下事件之前,系统都会调用WH_CBTHoo k子程,这些事件包括: 1.激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件; 2.完成系统指令; 3.来自系统消息队列中的移动鼠标,键盘事件; 4.设置输入焦点事件; 5 ?同步系统消息队列事件。

ASCII码表和键盘键码表及Java键码表

表一:ASCII 码表(完整版) ASCII值字符ASCII值字符ASCII值字符ASCII值字符0NUT32(space)64@96、1SOH33!65A97a 2STX34”66B98b 3ETX35#67C99c 4EOT36$68D100d 5ENQ37%69E101e 6ACK38&70F102f 7BEL39,71G103g 8BS40(72H104h 9HT41)73I105i 10LF42*74J106j 11VT43+75K107k 12FF44,76L108l 13CR45-77M109m 14SO46.78N110n 15SI47/79O111o 16DLE48080P112p 17DCI49181Q113q 18DC250282R114r 19DC351383X115s 20DC452484T116t 21NAK53585U117u 22SYN54686V118v 23TB55787W119w 24CAN56888X120x 25EM57989Y121y 26SUB58:90Z122z 27ESC59;91[123{ 28FS60<92/124| 29GS61=93]125} 30RS62>94^126~ 31US63? 95—127DEL 注:特殊控制字符所代表含义 NUL 空VT 垂直制表SYN 空转同步HT 横向列表SOH 标题开始FF 走纸控制ETB 信息组传送结束LF 换行 STX 正文开始CR 回车CAN 作废GS 组分隔符ETX 正文结束SO 移位输出EM 纸尽NAK 否定EOY 传输结束SI 移位输入SUB 换置US 单元分隔符ENQ 询问字符DLE 空格ESC 换码DEL 删除 ACK 承认BS 退一格FS 文字分隔符RS 记录分隔符DC1设备控制1DC2 设备控制2DC3 设备控制3DC4 设备控制4 BEL 报警

第4章钩子函数和窗口子类化

第4章钩子函数和窗口子类化 钩子是操作系统消息处理的一种机制。通过钩子,应用程序可以安装一个钩子回调过程让系统调用,从而监视系统中的消息队列,在这些消息到达目标窗口之前对这些消息进行处理。 本章主要介绍钩子函数的基本概念以及几种常用钩子的应用举例。 4.1 钩子函数 早在Windows3.x的时候,就有了钩子函数,它经历了Windows9x/NT/2000/XP/2003各个操作系统,始终保持了最大的兼容性。可以说大部分的钩子函数适用于现在所有的Win32操作系统,钩子函数在系统编程方面有着广泛的应用前景。 首先应该承认钩子会降低系统的性能,因为它增加系统处理每一个消息的开销,所以用户除非必要才安装钩子,而且还要尽可能早地去除钩子。 操作系统支持多种类型的钩子,每种类型都提供了它特有的消息处理机制,比如应用程序使用WH_MOUSE钩子只能监视鼠标的消息队列。对于每种类型的钩子,系统都维护一个各自独立的钩子链,钩子链是一个指向用户提供的回调函数钩子过程的链表指针。当与特定类型的钩子相关的窗口消息发生时,系统会把消息依次传递给钩子链中的每一个回调过程,传递的过程由用户定义的回调过程实现。一般情况下,用户提供的钩子回调过程必须调用钩子链中的下一个回调过程。否则钩子处理可能会中断,出现不可预测的结果。钩子过程可以监视窗口消息,也可以修改甚至停止钩子消息的继续传递,不让它到达钩子链中的下一个目标过程。 钩子过程需要用户调用SetWindowsHookEx函数进行安装。钩子过程一般遵循下面的调用规范。 LRESULT CALLBACK HookProc(intnCode,WPARAMwParam,LPARAMlParam);其中HookProc是应用程序提供的函数名。nCode参数是一个钩子标识码,钩子过程会利用它决定下一步进行的操作。这个标识码的值与安装的钩子类型有关。每种类型都有它的自身定义。后面两个参数的定义依赖于nCode参数,一般用于存放与窗口消息相关的内容。SetWindowsHookEx函数会自动安装一个钩子过程,这个过程位于钩子链表的头部,最后安装的钩子函数总是最先得到响应。前面的钩子处理过程可以决定是否调用钩子链中的下一个过程,这可以通过调用CallNextHookEx函数实现。 注意:某些钩子类型能够监视发生的窗口消息系统自动把消息依次传递给钩子链中的每一个钩子过程,而不管用户是否调用CallNextHookEx函数。 全局钩子会监视同一桌面环境下所有的窗口消息,而线程钩子只能监视单个线程内发生的消息。由于全局钩子能够在同一桌面的所有应用环境下调用,所有这个钩子过程必须在一个动态链接库中实现。 注意:全局钩子一般只用于调试目的,应尽可能地避免使用。全局钩子会显著地降低系统的性能,增加系统的开销,并可能会与安装同一全局钩子的应用程序发生冲突。钩子函数的处理应该尽可能简单,并要快速退出。对于处理复杂的过程,可以借助于发送异步处理窗口消息的方式实现。 操作系统提供了以下一些钩子,这些钩子允许用户监视系统消息处理的某一个方面。如表4-1所示: 安装钩子函数要用到SetWindowsHookEx函数。对于全局钩子而言,钩子过程必须在一个动态链接库模块中实现,这个过程必须作为动态链接库的输出函数,以便能够在安装钩子程序中通过调用LoadLibrary/GetProcAddress函数获得回调过程的地址,然后把回调函数的地址传递给SetWindowsHookEx函数。 HOOK PROC hkprcSys Msg; Static HINSTANCE hinstDLL; Static HHOOK hhookSysMsg; hinstDLL=LoadLibrary((LPCTSTR)"c:\\windows\\sysmsg.dll");

键盘ASCLL编码一览表

ASCLL码表 ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符 0 NUT 32 (space) 64 @ 96 、 1 SOH 33 !65 A 97 a 2 STX 34 ”66 B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL 39 , 71 G 103 g 8 BS 40 ( 72 H 104 h 9 HT 41 ) 73 I 105 i 10 LF 42 * 74 J 106 j 11 VT 43 + 75 K 107 k 12 FF 44 , 76 L 108 l 13 CR 45 - 77 M 109 m 14 SO 46 . 78 N 110 n 15 SI 47 / 79 O 111 o 16 DLE 48 0 80 P 112 p 17 DCI 49 1 81 Q 113 q 18 DC2 50 2 82 R 114 r 19 DC3 51 3 83 X 115 s 20 DC4 52 4 84 T 116 t 21 NAK 53 5 85 U 117 u 22 SYN 54 6 86 V 118 v 23 TB 55 7 87 W 119 w 24 CAN 56 8 88 X 120 x 25 EM 57 9 89 Y 121 y 26 SUB 58 : 90 Z 122 z 27 ESC 59 ; 91 [ 123 { 28 FS 60 < 92 \ 124 | 29 GS 61 = 93 ] 125 } 30 RS 62 > 94 ^ 126 ~ 31 US 63 ? 95 —127 DEL NUL VT 垂直制表SYN 空转同步

综合课程设计报告--键盘输入截获系统的设计与实现

综合课程设计报告--键盘输入截获系统的设计与实现

键盘输入截获系统的设计与实现 摘要 Windows系统键盘截获系统,在我们的生活中是很常见的,比如在军方的某些系统中,为确保某些机密信息不被泄露出去,就要求在工作人员在于外界交流的时候,无意中输出的可能隐含机密信息不被发送出去,此时可以设置关键字,使用钩子来屏蔽这些信息,不让其发送出去,这样就很好的杜绝了机密信息的泄露的发生,提高军方系统的安全性,以上是一个很常见的例子,那么当提及到Windows系统信息截获,不得不想到动态链接库和钩子,动态链接库在Windows 系统中无处不在,编程过程中,调用的所有的API都是从系统动态链接库导出的,实际上,不使用动态链接库几乎是不可能的,因为Windows 提供给编程人员的几乎所有功能都驻留在动态链接库中。 Windows 应用程序的运行模块是基于消息驱动的,任何线程只要注册了窗口类都会有一个消息队列来接收用户的输入消息和系统消息。为了取得特定线程接收或者发送的消息,就要用到Windows提供的钩子。Windows钩子广泛应用

于各种检测侦查程序中,如输入监视、API截获等。一般的钩子函数都必须写在动态链接库中,以便注入到其进程。 一、需求分析 1、实验要求: 设计一个基于Windows或Linux的键盘输入捕获系统,对特定键盘输入进行检测过滤。要求如下: (1)设计一个键盘钩子程序捕获键盘动作,捕获任意窗口上的键盘输入,并进行记录; (2)能监控QQ、MSN、word、Excel、记事本、IE网页等应用程序; (3)设置一些关键词,根据键盘输入,设计一种关键词检测的方法,能在记录的键盘输入中检测出关键词出现的位置; (4)对输入的关键词,进行过滤,阻止其在相关的应用程序中输出; 2、实验环境: Microsoft Visual studio 2010 二、实验分组情况: 三、实验原理概述: 钩子:钩子是Windows中可以拦截事件的一种机制,可以指定一个函数作为特定类型的 被拦截事件的钩子过程。钩子过程可以对 拦截的每个事件进行处理。不同类型的钩 子可以为消息处理机制的不同方面提供 访问,例如,WH_MOUSE钩子可以监视与 鼠标操作相关的消息。系统为每一个类型 的钩子维护一个独立的钩子链,其中包含 指定一组作为钩子过程的回调函数指针。 当与指定类型的钩子相关联的消息发生

VB键盘常量大全 256个虚拟键码

Public Const VK_LBUTTON = &H1 Public Const VK_RBUTTON = &H2 Public Const VK_CANCEL = &H3 Public Const VK_MBUTTON = &H4 Public Const VK_BACK = &H8 Public Const VK_TAB = &H9 Public Const VK_CLEAR = &HC Public Const VK_RETURN = &HD Public Const VK_SHIFT = &H10 Public Const VK_CONTROL = &H11 Public Const VK_MENU = &H12 Public Const VK_PAUSE = &H13 Public Const VK_CAPITAL = &H14 Public Const VK_ESCAPE = &H1B Public Const VK_SPACE = &H20 Public Const VK_PRIOR = &H21 Public Const VK_NEXT = &H22 Public Const VK_END = &H23 Public Const VK_HOME = &H24 Public Const VK_LEFT = &H25 Public Const VK_UP = &H26 Public Const VK_RIGHT = &H27 Public Const VK_DOWN = &H28 Public Const VK_Select = &H29 Public Const VK_PRINT = &H2A Public Const VK_EXECUTE = &H2B Public Const VK_SNAPSHOT = &H2C Public Const VK_Insert = &H2D Public Const VK_Delete = &H2E Public Const VK_HELP = &H2F Public Const VK_0 = &H30 Public Const VK_1 = &H31 Public Const VK_2 = &H32 Public Const VK_3 = &H33 Public Const VK_4 = &H34 Public Const VK_5 = &H35 Public Const VK_6 = &H36 Public Const VK_7 = &H37 Public Const VK_8 = &H38 Public Const VK_9 = &H39 Public Const VK_A = &H41 Public Const VK_B = &H42 Public Const VK_C = &H43 Public Const VK_D = &H44

钩子函数捕捉键盘消息

利用钩子函数来捕捉键盘响应的windows应用程序一:引言: 你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数。因此本文将对钩子函数的相关知识进行阐述。当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述。(本文的程序为vc6.0的开发环境,语言是:C和win32 api)。 二:钩子概述: 微软的windowsX操作系统是建立在事件驱动的机制上的,也就是通过消息传递来实现。而钩子在windows操作系统中,是一种能在事件(比如:消息、鼠标激活、键盘响应)到达应用程序前中途接获事件的机制。而且,钩子函数还可以通过修改、丢弃等手段来对事件起作用。 Windows 有两种钩子,一种是特定线程钩子(Thread specific hooks),一种是全局系统钩子(Systemwide hooks)。特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。无论是特定线程钩子,还是全局系统钩子,都是通过SetWindowsHookEx ()来设置钩子的。对于特定线程钩子,钩子的函数既可以是包含在一个.exe也可以是一个.dll。但是对于一个全局系统钩子,钩子函数必须包含在独立的dll中,因此,当我们要捕捉键盘响应时,我们必须创建一个动态链接库。但是当钩子函数在得到了控制权,并对相关的事件处理完后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx。由于系统必须对每个消息处理,钩子程序因此增加了处理的负担,因此也降低了系统的性能。鉴于这一点,在windows ce中对钩子程序并不支持。所以当程序完成并退出时,应当释放钩子,调用函数:UnhookWindowsHookEx。 下面我们将举一个例子(捕捉键盘)来详细的讲解钩子函数的程序设计。 三:程序的设计: I:设置钩子 设置钩子是通过SetWindowsHookEx ()的API函数. 原形: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId) idhook:装入钩子的类型. lpfn: 钩子进程的入口地址 hMod: 应用程序的事件句柄 dwThreadId: 装入钩子的线程标示 参数: idHook: 这个参数可以是以下值: WH_CALLWNDPROC、WH_CALLWNDPROCRET、WH_CBT、WH_DEBUG、WH_FOREGROUNDIDLE、 WH_GETMESSAGE、WH_JOURNALPLAYBACK、WH_JOURNALRECORD、WH_KEYBOARD、WH_KEYBOARD_LL、

键盘按键编码

键盘按键编码 字母和数字键的键码值(keyCode) 按键键码按键键码按键键码按键键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 3 51 D 68 M 77 V 86 4 52 E 69 N 78 W 87 5 53 F 70 O 79 X 88 6 54 G 71 P 80 Y 89 7 55 H 72 Q 81 Z 90 8 56 I 73 R 82 0 48 9 57 数字键盘上的键的键码值(keyCode) 功能键键码值(keyCode) 按键键码按键键码按键键码按键键码 0 96 8 104 F1 112 F7 118 1 97 9 105 F 2 11 3 F8 119 2 98 * 106 F 3 11 4 F9 120 3 99 + 107 F 4 11 5 F10 121 4 100 - 109 F 5 11 6 F11 122 5 101 . 110 F 6 11 7 F12 123

6 102 / 111 Enter 108 7 103 控制键键码值(keyCode) 按键键码按键键码按键键码按键键码BackSpace 8 Esc 27 Right Arrow 39 -_ 189 Tab 9 Spacebar 32 Down Arrow 40 .> 190 Clear 12 Page Up 33 Insert 45 /? 191 Enter 13 Page Down 34 Delete 46 `~ 192 Shift 16

End 35 Num Lock 144 [{ 219 Control 17 Home 36 ;: 186 \| 220 Alt 18 Left Arrow 37 =+ 187 ]} 221 Cape Lock 20 Up Arrow 38 ,< 188 '" 222

VC++如何编写键盘钩子

系统钩子和DLL 钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。 在本程序中我们需要捕获在任意窗口上的键盘输入,这就需要采用全局钩子以便拦截整个系统的消息,而全局钩子函数必须以DLL(动态连接库)为载体进行封装,VC6中有三种形式的MFC DLL可供选择,即Regular statically linked to MFC DLL(标准静态链接MFC DLL)、Regular using the shared MFC DLL(标准动态链接MFC DLL)以及Extension MFC DLL(扩展MFC DLL)。在本程序中为方便起见采用了标准静态连接MFC DLL。 键盘钩子程序示例 本示例程序用到全局钩子函数,程序分两部分:可执行程序KeyKook和动态连接库LaunchDLL。首先创建一个MFC AppWizard(DLL)工程,并选择Regular statically linked to MFC DLL (标准静态链接MFC DLL)选项,以建立MFC扩展动态连接库LaunchDLL.dll。之后,在相应的头文件中添加宏定义和待导出函数的声明: #define DllExport __declspec(dllexport) …… DllExport void WINAPI InstallLaunchEv(); …… class CLaunchDLLApp : public CWinApp { public: CLaunchDLLApp(); //{{AFX_VIRTUAL(CLaunchDLLApp) //}}AFX_VIRTUAL //{{AFX_MSG(CLaunchDLLApp) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; 同时在实现文件中添加全局变量Hook和全局函数LauncherHook()、SaveLog(): HHOOK Hook; LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam); void SaveLog(char* c); 最后,完成以上提到的这几个函数的具体编码实现:

键盘钩子实例

键盘钩子实例 一、界面样式如下: 主要功能如下:安装钩子拦截按键,允许按键有效和无效,可以记录按键,以及取消钩子。 二、定义界面控件:label1 标记按键、button1 安装钩子按钮、button2 取消钩子按钮 三、源码 1、主界面Form1 using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Reflection; using System.Diagnostics; using Microsoft.Win32; using WinformHook; namespace WinformHook { public partial class Form1 : Form { //钩子管理对象 private KeyboardHookLib _keyboardHook = null; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //安装钩子 _keyboardHook = new KeyboardHookLib(); _keyboardHook.InstallHook(this.OnKeyPress);

} private void button2_Click(object sender, EventArgs e) { //取消钩子 if (_keyboardHook != null) _keyboardHook.UninstallHook(); } ///

///客户端键盘捕捉事件 /// ///由Hook程序发送的按键信息 ///是否拦截 public void OnKeyPress(KeyboardHookLib.HookStruct hookStruct, out bool handle) { handle = false; //预设置不拦截任何键 if (hookStruct.vkCode == 91) //截获左侧开始win键 { handle = true; } if (hookStruct.vkCode == 92)// 截获右侧开始win键 { handle = true; } //截获Ctrl+Esc if (hookStruct.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control) { handle = true; } //截获alt+f4 if (hookStruct.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt) { handle = true; } //截获alt+tab if (hookStruct.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt) { handle = true; } //截获F1 if (hookStruct.vkCode == (int)Keys.F1) {

C语言第24讲 钩子函数

第24讲钩子函数 目前对钩子的理解: 譬如我们用鼠标在某个窗口上双击了一次, 或者给某个窗口输入了一个字母A; 首先发现这些事件的不是窗口, 而是系统! 然后系统告诉窗口: 喂! 你让人点了, 并且是连续点了两鼠标, 你准备怎么办? 或者是系统告诉窗口: 喂! 有人向你家里扔砖头了, 不信你看看, 那块砖头是A. 这时窗口的对有些事件会忽略、对有些事件会做出反应: 譬如, 可能对鼠标单击事件忽略, 窗口想: 你单击我不要紧, 累死你我不负责; 但一旦谁要双击我, 我会马上行动, 给你点颜色瞧瞧! 这里窗口准备要采取的行动, 就是我们提前写好的事件. 用Windows 的话说, 窗口的事件就是系统发送给窗口的消息; 窗口要采取的行动(事件代码)就是窗口的回调函数. 但是! 往往隔墙有耳. 系统要通知给窗口的"话"(消息), 可能会被另一个家伙(譬如是一个贼)提前听到! 有可能这个贼就是专门在这等情报的, 贼知道后, 往往在窗口知道以前就采取了行动! 并且这个贼对不同的消息会采取不同的行动方案, 它的行动方案一般也是早就准备好的; 当然这个贼也不是对什么消息都感兴趣, 对不感兴趣的消息也就无须制定相应的行动方案. 总结: 这个"贼"就是我们要设置的钩子; "贼"的"行动方案"就是钩子函数, 或者叫钩子的回调函数. ________________________________________

钩子分两种, 一种是系统级的全局钩子; 一种是线程级的钩子. 全局钩子函数需要定义在DLL 中, 从线程级的钩子开始比较简单. 其实钩子函数就三个: 设置钩子: SetWindowsHookEx 释放钩子: UnhookWindowsHookEx 继续钩子: CallNextHookEx 在线程级的钩子中经常用到GetCurrentThreadID 函数来获取当前线程的ID. 下面例子中设定了一个线程级的键盘钩子, 专门拦截字母A.

钩子函数和回调函数

钩子函数和回调函数 对应关系:Specifies the type of hook procedure to be installed. This parameter can be one of the following values. Value Description WH_CALLWNDPROC Installs a hook procedure that monitors messages before the system sends them to the destination window procedure. For more information, see the CallWndProc hook procedure. WH_CALLWNDPROCRET Installs a hook procedure that monitors messages after they have been processed by the destination window procedure. For more information, see the CallWndRetProc hook procedure. WH_CBT Installs a hook procedure that receives notifications useful to a computer-based training (CBT) application. For more information, see the CBTProc hook procedure. WH_DEBUG Installs a hook procedure useful for debugging other hook procedures. For more information, see the DebugProc hook procedure.

钩子函数在盗号木马程序中的应用研究

钩子函数在盗号木马程序中的应用研究 刘文锋 (菏泽学院计算机与信息工程系山东菏泽274015) 【摘要】:本文探讨了盗号木马病毒利用钩子函数的原理机制,盗取用户机密信息的过程,为用户预防该类型的木马提供了帮助。 【关键词】:钩子,盗号木马,函数 1.引言 首先由江民反病毒中心在2004年11月底截获的证券大盗木马病毒让人记忆犹新,几年前证券大盗病毒曾经盗买盗卖股票金额高达数千万元人民币,这让很多人担心自己的网上股票账户会在一夜之间被病毒抛售一空。证券大盗病毒是一种盗号木马病毒,中了该病毒的计算机将被盗取关于多家证券交易系统的交易帐户和密码。这种病毒在2007年和2008年又出现了几种病毒变种。这让很多网民特别是股民整日提心掉胆。 网络游戏也是盗号木马非常关注的领域,如魔兽大盗变种QZZ、征途大盗、传奇大盗、西游大盗、诛仙窃贼、完美世界窃贼、天龙神偷、梦幻西游大盗等都是很容易中的木马盗号病毒。仅根据金山发布的2007年上半年安全报告,就2007上半年新增的木马中,盗号木马是最严重的一类木马,占到木马总数的76. 04%,高达58245种。再越来越信息化和网络化的现实世界中,我们将不得不面临各种各样的盗号木马。其实盗号木马的原理非常简单,大多利用钩子函数或截屏来记录用户的账户密码信息,那么首先让我们了解一下钩子函数。 2.Windows中的钩子函数 微软的windows操作系统是建立在事件驱动的机制上,即通过消息传递来实现。而钩子在windows操作系统中,是一种能在事件到达应用程序前中途接获事件的机制,这种技术原理很容易被盗号木马利用,比如我们发送的即时消息、用鼠标激活的相应程序或代码、键盘上输入过的账号密码等信息。并且,钩子函数还可以通过修改或丢弃等手段来对事件起作用。 Windows中有两种钩子,一种是特定线程钩子(Thread Spe-cific Hooks),一种是全局系统钩子(Systemwide Hooks)。特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。无论是特定线程钩子,还是全局系统钩子,都是通过SetWindowsHookEx()来设置钩子的相关信息。对于特定的线程钩子,钩子的函数可以是包含在一个.exe文件中,也可以是一个单独的.dll文件。但是对于全局系统钩子,钩子函数必须包含在独立的dll当中。当我们要捕捉键盘数据时,首先我们必须创建一个动态链接库。但是当钩子函数得到了控制权,并对相关事件处理完成以后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx()。由于系统必须对每个消息单独处理,所以钩子函数增加了CPU的负担,也降低了系统的性能。所以当程序完成并退出时,应当释放钩子,调用函数:Un-hookWindowsHookEx()。 3.钩子函数的使用原理 编写钩子函数的步骤可分为三步:定义钩子函数、安装设置钩子和释放钩子。 1)定义钩子函数 钩子函数是一种特殊的回调函数。如果钩子监视的特定事件发生后,系统会转入调用钩子函数进行相应处理。不同事件的钩子函数的形式是各不相同的。下面以鼠标钩子函数举例说明钩子函数的原型: LRESULT CALLBACKHookProc(int nCode,WPARAM wParam,LPARAM lParam) 参数wParam和lParam包含所钩消息的信息,比如鼠标位置和鼠标状态或者键盘按键等。nCode是指有关消息本身的信息,比如是否从消息队列中移出。我们可以先在钩子函数中实现自定义的功能,然后再调用函数CallNextHookEx()把钩子信息传递给钩子链的下一个钩子函数。当然也可以通过直接返回TRUE来丢弃该消息,就阻止了该消息的传递。 2)安装设置钩子 只要感染了盗号木马,钩子函数即设置成功。 设置钩子是通过SetWindowsHookEx()的API函数。当然我们也可以使用其他MFC等功能实现。使用的函数原形如下: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HIN-STANCE hMod,DWORD dwThreadId) idhook:使用钩子的类型值; lpfn:钩子进程的入口地址; hMod:应用程序事件的文件句柄; dwThreadId:使用钩子的线程标识。 idHook根据使用的不同可以设置不同的参数值。如以下两个参数,一个是关于记录键盘的钩子函数,另一个是记录鼠标的钩子函数。 a)WH_KEYBOARD:当使用键盘敲打消息即键盘敲打的每一个字符,在这个消息被放在应用程序的消息队列前,WIN-DOWS将首先调用你的钩子函数。钩子函数可以改变和复制甚至丢弃键盘敲打过的消息。 b)WH_MOUSE:使用这个参数鼠标消息会在被放在应用程序的消息队列前,WINDOWS将会调用你的钩子函数,钩子函数可以改变记录甚至丢弃鼠标消息。 3)释放钩子 当不再使用钩子时,必须及时卸载。这样可以减少CPU的负担。 钩子程序的释放使用的是UnhookWindowsHookEx()函数。该函数的原形为BOOL UnhookWindowsHookEx(HHOOK hhk),BOOL是该函数的返回值类型。UnhookWindowsHookEx()函数将释放的是钩子链中函数SetWindowsHookEx所装入的钩子进程。钩子变量hhk是将要释放的钩子进程的句柄。 4.结束语 WINDOWS的钩子函数是WINDOWS的主要特点之一。利用这些钩子函数,可以捕捉自己进程或其它进程发生的事件。通过"钩挂",您可以给WINDOWS一个处理或过滤事件的回调钩子函数,当每次发生某些事件时,WINDOWS都将调用该函数。主要有两种类型的钩子:局部的钩子函数和远程(下转第48页)

相关文档
最新文档