http://blog.csdn.net/dyx1024/article/details/7311013python
使用pyhook模塊能夠很快地完成鍵盤及鼠標事件捕獲,此模塊可從http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/下載,API手冊:http://pyhook.sourceforge.net/doc_1.5.0/,網站上提供了個使用的例子,改寫了下,將信息記錄到文件中,原本想使用python的logging模塊,但測試時發現,由於鼠標事件頻率過高,致使寫時報I/O錯誤的異常,因此使用了本身寫文件記錄日誌的方式。數據庫
代碼:函數
-
-
-
-
- import pythoncom
- import pyHook
- import time
-
-
- def onMouseEvent(event):
- "處理鼠標事件"
- fobj.writelines('-' * 20 + 'MouseEvent Begin' + '-' * 20 + '\n')
- fobj.writelines("Current Time:%s\n" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()))
- fobj.writelines("MessageName:%s\n" % str(event.MessageName))
- fobj.writelines("Message:%d\n" % event.Message)
- fobj.writelines("Time_sec:%d\n" % event.Time)
- fobj.writelines("Window:%s\n" % str(event.Window))
- fobj.writelines("WindowName:%s\n" % str(event.WindowName))
- fobj.writelines("Position:%s\n" % str(event.Position))
- fobj.writelines('-' * 20 + 'MouseEvent End' + '-' * 20 + '\n')
- return True
-
-
- def onKeyboardEvent(event):
- "處理鍵盤事件"
- fobj.writelines('-' * 20 + 'Keyboard Begin' + '-' * 20 + '\n')
- fobj.writelines("Current Time:%s\n" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()))
- fobj.writelines("MessageName:%s\n" % str(event.MessageName))
- fobj.writelines("Message:%d\n" % event.Message)
- fobj.writelines("Time:%d\n" % event.Time)
- fobj.writelines("Window:%s\n" % str(event.Window))
- fobj.writelines("WindowName:%s\n" % str(event.WindowName))
- fobj.writelines("Ascii_code: %d\n" % event.Ascii)
- fobj.writelines("Ascii_char:%s\n" % chr(event.Ascii))
- fobj.writelines("Key:%s\n" % str(event.Key))
- fobj.writelines('-' * 20 + 'Keyboard End' + '-' * 20 + '\n')
- return True
-
-
-
-
- if __name__ == "__main__":
- ''
-
-
-
-
-
-
-
-
-
- file_name = "D:\\hook_log.txt"
- fobj = open(file_name, 'w')
-
-
-
- hm = pyHook.HookManager()
-
-
-
- hm.KeyDown = onKeyboardEvent
- hm.HookKeyboard()
-
-
-
- hm.MouseAll = onMouseEvent
- hm.HookMouse()
-
-
- pythoncom.PumpMessages()
-
-
- fobj.close()
測試:測試
- --------------------Keyboard Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:01
- MessageName:key down
- Message:256
- Time:6376015
- Window:66926
- WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer
- Ascii_code: 103
- Ascii_char:g
- Key:G
- --------------------Keyboard End--------------------
- --------------------MouseEvent Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:01
- MessageName:mouse move
- Message:512
- Time_sec:6376078
- Window:132584
- WindowName:None
- Position:(724, 344)
- --------------------MouseEvent End--------------------
- --------------------MouseEvent Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:01
- MessageName:mouse move
- Message:512
- Time_sec:6376109
- Window:132584
- WindowName:None
- Position:(724, 344)
- --------------------MouseEvent End--------------------
- --------------------Keyboard Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:01
- MessageName:key down
- Message:256
- Time:6376625
- Window:66926
- WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer
- Ascii_code: 111
- Ascii_char:o
- Key:O
- --------------------Keyboard End--------------------
- --------------------Keyboard Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:02
- MessageName:key down
- Message:256
- Time:6376781
- Window:66926
- WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer
- Ascii_code: 111
- Ascii_char:o
- Key:O
- --------------------Keyboard End--------------------
- --------------------Keyboard Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:02
- MessageName:key down
- Message:256
- Time:6377000
- Window:66926
- WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer
- Ascii_code: 103
- Ascii_char:g
- Key:G
- --------------------Keyboard End--------------------
- --------------------Keyboard Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:02
- MessageName:key down
- Message:256
- Time:6377140
- Window:66926
- WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer
- Ascii_code: 108
- Ascii_char:l
- Key:L
- --------------------Keyboard End--------------------
- --------------------Keyboard Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:02
- MessageName:key down
- Message:256
- Time:6377187
- Window:66926
- WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer
- Ascii_code: 101
- Ascii_char:e
- Key:E
- --------------------Keyboard End--------------------
- --------------------MouseEvent Begin--------------------
- Current Time:Thu, 01 Mar 2012 15:07:07
- MessageName:mouse move
- Message:512
- Time_sec:6382093
- Window:132584
- WindowName:None
- Position:(725, 344)
- --------------------MouseEvent End--------------------
由上面的記錄能夠看出,當時我經過IE上淘寶,而且輸入了google這個單詞,有可能這是商品名,用戶名,或者密碼,呵呵。
查看Ascii_char字段便可看出輸入的字母。若是沒有解析出來,可經過Ascii_code字段的值到ASCII表中查找便可。
網站
附:google
ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼,ASCⅡ)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語和其餘西歐語言。它是現今最通用的單字節編碼系統,並等同於國際標準ISO/IEC 646。編碼
ASCII第一次以規範標準的型態發表是在1967年,最後一次更新則是在1986年,至今爲止共定義了128個字符,其中33個字符沒法顯示(這是以現今操做系統爲依歸,但在DOS模式下可顯示出一些諸如笑臉、撲克牌花式等8-bit符號),且這33個字符多數都已經是陳廢的控制字符,控制字符的用途主要是用來操控已經處理過的文字,在33個字符以外的是95個可顯示的字符,包含用鍵盤敲下空白鍵所產生的空白字符也算1個可顯示字符(顯示爲空白)。spa
ASCII控制字符
二進制 |
十進制 |
十六進制 |
縮寫 |
能夠顯示的表示法 |
名稱/意義 |
0000 0000 |
0 |
00 |
NUL |
␀ |
空字符(Null) |
0000 0001 |
1 |
01 |
SOH |
␁ |
標題開始 |
0000 0010 |
2 |
02 |
STX |
␂ |
本文開始 |
0000 0011 |
3 |
03 |
ETX |
␃ |
本文結束 |
0000 0100 |
4 |
04 |
EOT |
␄ |
傳輸結束 |
0000 0101 |
5 |
05 |
ENQ |
␅ |
請求 |
0000 0110 |
6 |
06 |
ACK |
␆ |
確認迴應 |
0000 0111 |
7 |
07 |
BEL |
␇ |
響鈴 |
0000 1000 |
8 |
08 |
BS |
␈ |
退格 |
0000 1001 |
9 |
09 |
HT |
␉ |
水平定位符號 |
0000 1010 |
10 |
0A |
LF |
␊ |
換行鍵 |
0000 1011 |
11 |
0B |
VT |
␋ |
垂直定位符號 |
0000 1100 |
12 |
0C |
FF |
␌ |
換頁鍵 |
0000 1101 |
13 |
0D |
CR |
␍ |
歸位鍵 |
0000 1110 |
14 |
0E |
SO |
␎ |
取消變換(Shift out) |
0000 1111 |
15 |
0F |
SI |
␏ |
啓用變換(Shift in) |
0001 0000 |
16 |
10 |
DLE |
␐ |
跳出數據通信 |
0001 0001 |
17 |
11 |
DC1 |
␑ |
設備控制一(XON 啓用軟件速度控制) |
0001 0010 |
18 |
12 |
DC2 |
␒ |
設備控制二 |
0001 0011 |
19 |
13 |
DC3 |
␓ |
設備控制三(XOFF 停用軟件速度控制) |
0001 0100 |
20 |
14 |
DC4 |
␔ |
設備控制四 |
0001 0101 |
21 |
15 |
NAK |
␕ |
確認失敗迴應 |
0001 0110 |
22 |
16 |
SYN |
␖ |
同步用暫停 |
0001 0111 |
23 |
17 |
ETB |
␗ |
區塊傳輸結束 |
0001 1000 |
24 |
18 |
CAN |
␘ |
取消 |
0001 1001 |
25 |
19 |
EM |
␙ |
鏈接介質中斷 |
0001 1010 |
26 |
1A |
SUB |
␚ |
替換 |
0001 1011 |
27 |
1B |
ESC |
␛ |
跳出 |
0001 1100 |
28 |
1C |
FS |
␜ |
文件分割符 |
0001 1101 |
29 |
1D |
GS |
␝ |
組羣分隔符 |
0001 1110 |
30 |
1E |
RS |
␞ |
記錄分隔符 |
0001 1111 |
31 |
1F |
US |
␟ |
單元分隔符 |
0111 1111 |
127 |
7F |
DEL |
␡ |
刪除 |
ASCII可顯示字符
二進制 |
十進制 |
十六進制 |
圖形 |
0010 0000 |
32 |
20 |
(空格)(␠) |
0010 0001 |
33 |
21 |
! |
0010 0010 |
34 |
22 |
" |
0010 0011 |
35 |
23 |
# |
0010 0100 |
36 |
24 |
$ |
0010 0101 |
37 |
25 |
% |
0010 0110 |
38 |
26 |
& |
0010 0111 |
39 |
27 |
' |
0010 1000 |
40 |
28 |
( |
0010 1001 |
41 |
29 |
) |
0010 1010 |
42 |
2A |
* |
0010 1011 |
43 |
2B |
+ |
0010 1100 |
44 |
2C |
, |
0010 1101 |
45 |
2D |
- |
0010 1110 |
46 |
2E |
. |
0010 1111 |
47 |
2F |
/ |
0011 0000 |
48 |
30 |
0 |
0011 0001 |
49 |
31 |
1 |
0011 0010 |
50 |
32 |
2 |
0011 0011 |
51 |
33 |
3 |
0011 0100 |
52 |
34 |
4 |
0011 0101 |
53 |
35 |
5 |
0011 0110 |
54 |
36 |
6 |
0011 0111 |
55 |
37 |
7 |
0011 1000 |
56 |
38 |
8 |
0011 1001 |
57 |
39 |
9 |
0011 1010 |
58 |
3A |
: |
0011 1011 |
59 |
3B |
; |
0011 1100 |
60 |
3C |
< |
0011 1101 |
61 |
3D |
= |
0011 1110 |
62 |
3E |
> |
0011 1111 |
63 |
3F |
? |
|
|
二進制 |
十進制 |
十六進制 |
圖形 |
0100 0000 |
64 |
40 |
@ |
0100 0001 |
65 |
41 |
A |
0100 0010 |
66 |
42 |
B |
0100 0011 |
67 |
43 |
C |
0100 0100 |
68 |
44 |
D |
0100 0101 |
69 |
45 |
E |
0100 0110 |
70 |
46 |
F |
0100 0111 |
71 |
47 |
G |
0100 1000 |
72 |
48 |
H |
0100 1001 |
73 |
49 |
I |
0100 1010 |
74 |
4A |
J |
0100 1011 |
75 |
4B |
K |
0100 1100 |
76 |
4C |
L |
0100 1101 |
77 |
4D |
M |
0100 1110 |
78 |
4E |
N |
0100 1111 |
79 |
4F |
O |
0101 0000 |
80 |
50 |
P |
0101 0001 |
81 |
51 |
Q |
0101 0010 |
82 |
52 |
R |
0101 0011 |
83 |
53 |
S |
0101 0100 |
84 |
54 |
T |
0101 0101 |
85 |
55 |
U |
0101 0110 |
86 |
56 |
V |
0101 0111 |
87 |
57 |
W |
0101 1000 |
88 |
58 |
X |
0101 1001 |
89 |
59 |
Y |
0101 1010 |
90 |
5A |
Z |
0101 1011 |
91 |
5B |
[ |
0101 1100 |
92 |
5C |
\ |
0101 1101 |
93 |
5D |
] |
0101 1110 |
94 |
5E |
^ |
0101 1111 |
95 |
5F |
_ |
|
|
二進制 |
十進制 |
十六進制 |
圖形 |
0110 0000 |
96 |
60 |
` |
0110 0001 |
97 |
61 |
a |
0110 0010 |
98 |
62 |
b |
0110 0011 |
99 |
63 |
c |
0110 0100 |
100 |
64 |
d |
0110 0101 |
101 |
65 |
e |
0110 0110 |
102 |
66 |
f |
0110 0111 |
103 |
67 |
g |
0110 1000 |
104 |
68 |
h |
0110 1001 |
105 |
69 |
i |
0110 1010 |
106 |
6A |
j |
0110 1011 |
107 |
6B |
k |
0110 1100 |
108 |
6C |
l |
0110 1101 |
109 |
6D |
m |
0110 1110 |
110 |
6E |
n |
0110 1111 |
111 |
6F |
o |
0111 0000 |
112 |
70 |
p |
0111 0001 |
113 |
71 |
q |
0111 0010 |
114 |
72 |
r |
0111 0011 |
115 |
73 |
s |
0111 0100 |
116 |
74 |
t |
0111 0101 |
117 |
75 |
u |
0111 0110 |
118 |
76 |
v |
0111 0111 |
119 |
77 |
w |
0111 1000 |
120 |
78 |
x |
0111 1001 |
121 |
79 |
y |
0111 1010 |
122 |
7A |
z |
0111 1011 |
123 |
7B |
{ |
0111 1100 |
124 |
7C |
| |
0111 1101 |
125 |
7D |
} |
0111 1110 |
126 |
7E |
~ |
|