Python:監控鍵盤輸入、鼠標操做,並將捕獲到的信息記錄到文件中 (轉)

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錯誤的異常,因此使用了本身寫文件記錄日誌的方式。數據庫

代碼:函數

 

[python]  view plain copy print ?
 
  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.   
  4.   
  5. import pythoncom  
  6. import pyHook  
  7. import time  
  8.   
  9.   
  10. def onMouseEvent(event):  
  11.     "處理鼠標事件"  
  12.     fobj.writelines('-' * 20 + 'MouseEvent Begin' + '-' * 20 + '\n')  
  13.     fobj.writelines("Current Time:%s\n" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()))  
  14.     fobj.writelines("MessageName:%s\n" % str(event.MessageName))  
  15.     fobj.writelines("Message:%d\n" % event.Message)  
  16.     fobj.writelines("Time_sec:%d\n" % event.Time)  
  17.     fobj.writelines("Window:%s\n" % str(event.Window))  
  18.     fobj.writelines("WindowName:%s\n" % str(event.WindowName))  
  19.     fobj.writelines("Position:%s\n" % str(event.Position))  
  20.     fobj.writelines('-' * 20 + 'MouseEvent End' + '-' * 20 + '\n')  
  21.     return True  
  22.   
  23.   
  24. def onKeyboardEvent(event):   
  25.     "處理鍵盤事件"     
  26.     fobj.writelines('-' * 20 + 'Keyboard Begin' + '-' * 20 + '\n')  
  27.     fobj.writelines("Current Time:%s\n" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()))  
  28.     fobj.writelines("MessageName:%s\n" % str(event.MessageName))  
  29.     fobj.writelines("Message:%d\n" % event.Message)  
  30.     fobj.writelines("Time:%d\n" % event.Time)  
  31.     fobj.writelines("Window:%s\n" % str(event.Window))  
  32.     fobj.writelines("WindowName:%s\n" % str(event.WindowName))  
  33.     fobj.writelines("Ascii_code: %d\n" % event.Ascii)  
  34.     fobj.writelines("Ascii_char:%s\n" % chr(event.Ascii))  
  35.     fobj.writelines("Key:%s\n" % str(event.Key))  
  36.     fobj.writelines('-' * 20 + 'Keyboard End' + '-' * 20 + '\n')  
  37.     return True  
  38.   
  39.   
  40.   
  41.   
  42. if __name__ == "__main__":   
  43.     ''''' 
  44.     Function:操做SQLITE3數據庫函數 
  45.     Input:NONE 
  46.     Output: NONE 
  47.     author: socrates 
  48.     blog:http://blog.csdn.net/dyx1024 
  49.     date:2012-03-1 
  50.     '''    
  51.           
  52.     #打開日誌文件  
  53.     file_name = "D:\\hook_log.txt"  
  54.     fobj = open(file_name,  'w')         
  55.   
  56.   
  57.     #建立hook句柄  
  58.     hm = pyHook.HookManager()  
  59.   
  60.   
  61.     #監控鍵盤  
  62.     hm.KeyDown = onKeyboardEvent  
  63.     hm.HookKeyboard()  
  64.   
  65.   
  66.     #監控鼠標  
  67.     hm.MouseAll = onMouseEvent  
  68.     hm.HookMouse()  
  69.       
  70.     #循環獲取消息  
  71.     pythoncom.PumpMessages()  
  72.       
  73.     #關閉日誌文件  
  74.     fobj.close()   

 

 

測試:測試

[plain]  view plain copy print ?
 
  1. --------------------Keyboard Begin--------------------  
  2. Current Time:Thu, 01 Mar 2012 15:07:01  
  3. MessageName:key down  
  4. Message:256  
  5. Time:6376015  
  6. Window:66926  
  7. WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer  
  8. Ascii_code: 103  
  9. Ascii_char:g  
  10. Key:G  
  11. --------------------Keyboard End--------------------  
  12. --------------------MouseEvent Begin--------------------  
  13. Current Time:Thu, 01 Mar 2012 15:07:01  
  14. MessageName:mouse move  
  15. Message:512  
  16. Time_sec:6376078  
  17. Window:132584  
  18. WindowName:None  
  19. Position:(724, 344)  
  20. --------------------MouseEvent End--------------------  
  21. --------------------MouseEvent Begin--------------------  
  22. Current Time:Thu, 01 Mar 2012 15:07:01  
  23. MessageName:mouse move  
  24. Message:512  
  25. Time_sec:6376109  
  26. Window:132584  
  27. WindowName:None  
  28. Position:(724, 344)  
  29. --------------------MouseEvent End--------------------  
  30. --------------------Keyboard Begin--------------------  
  31. Current Time:Thu, 01 Mar 2012 15:07:01  
  32. MessageName:key down  
  33. Message:256  
  34. Time:6376625  
  35. Window:66926  
  36. WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer  
  37. Ascii_code: 111  
  38. Ascii_char:o  
  39. Key:O  
  40. --------------------Keyboard End--------------------  
  41. --------------------Keyboard Begin--------------------  
  42. Current Time:Thu, 01 Mar 2012 15:07:02  
  43. MessageName:key down  
  44. Message:256  
  45. Time:6376781  
  46. Window:66926  
  47. WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer  
  48. Ascii_code: 111  
  49. Ascii_char:o  
  50. Key:O  
  51. --------------------Keyboard End--------------------  
  52. --------------------Keyboard Begin--------------------  
  53. Current Time:Thu, 01 Mar 2012 15:07:02  
  54. MessageName:key down  
  55. Message:256  
  56. Time:6377000  
  57. Window:66926  
  58. WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer  
  59. Ascii_code: 103  
  60. Ascii_char:g  
  61. Key:G  
  62. --------------------Keyboard End--------------------  
  63. --------------------Keyboard Begin--------------------  
  64. Current Time:Thu, 01 Mar 2012 15:07:02  
  65. MessageName:key down  
  66. Message:256  
  67. Time:6377140  
  68. Window:66926  
  69. WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer  
  70. Ascii_code: 108  
  71. Ascii_char:l  
  72. Key:L  
  73. --------------------Keyboard End--------------------  
  74. --------------------Keyboard Begin--------------------  
  75. Current Time:Thu, 01 Mar 2012 15:07:02  
  76. MessageName:key down  
  77. Message:256  
  78. Time:6377187  
  79. Window:66926  
  80. WindowName:淘寶網 - 淘我喜歡! - Windows Internet Explorer  
  81. Ascii_code: 101  
  82. Ascii_char:e  
  83. Key:E  
  84. --------------------Keyboard End--------------------  
  85. --------------------MouseEvent Begin--------------------  
  86. Current Time:Thu, 01 Mar 2012 15:07:07  
  87. MessageName:mouse move  
  88. Message:512  
  89. Time_sec:6382093  
  90. Window:132584  
  91. WindowName:None  
  92. Position:(725, 344)  
  93. --------------------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 ~
相關文章
相關標籤/搜索