打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python:监控键盘输入、鼠标操作
使用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代码
  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代码
  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:(724344)  
  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:(724344)  
  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:(725344)  
  93. --------------------MouseEvent End--------------------  


由上面的记录可以看出,当时我通过IE上淘宝,并且输入了google这个单词,有可能这是商品名,用户名,或者密码,呵呵。
查看Ascii_char字段即可看出输入的字母。如果没有解析出来,可通过Ascii_code字段的值到ASCII表中查找即可。

附:

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

  ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字符,其中33个字符无法显示(这是以现今操作系统为依归,但在DOS模式下可显示出一些诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符,控制字符的用途主要是用来操控已经处理过的文字,在33个字符之外的是95个可显示的字符,包含用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。


ASCII控制字符

二进制十进制十六进制缩写可以显示的表示法名称/意义
00000000000NUL?空字符(Null)
00000001101SOH?标题开始
00000010202STX?本文开始
00000011303ETX?本文结束
00000100404EOT?传输结束
00000101505ENQ?请求
00000110606ACK?确认回应
00000111707BEL?响铃
00001000808BS?退格
00001001909HT?水平定位符号
00001010100ALF?换行键
00001011110BVT?垂直定位符号
00001100120CFF?换页键
00001101130DCR?归位键
00001110140ESO?取消变换(Shift out)
00001111150FSI?启用变换(Shift in)
000100001610DLE?跳出数据通讯
000100011711DC1?设备控制一(XON 启用软件速度控制)
000100101812DC2?设备控制二
000100111913DC3?设备控制三(XOFF 停用软件速度控制)
000101002014DC4?设备控制四
000101012115NAK?确认失败回应
000101102216SYN?同步用暂停
000101112317ETB?区块传输结束
000110002418CAN?取消
000110012519EM?连接介质中断
00011010261ASUB?替换
00011011271BESC?跳出
00011100281CFS?文件分割符
00011101291DGS?组群分隔符
00011110301ERS?记录分隔符
00011111311FUS?单元分隔符
011111111277FDEL?删除

ASCII可显示字符

二进制十进制十六进制图形
001000003220(空格)(?)
001000013321!
001000103422"
001000113523#
001001003624$
001001013725%
001001103826&
001001113927'
001010004028(
001010014129)
00101010422A*
00101011432B+
00101100442C,
00101101452D-
00101110462E.
00101111472F/
0011000048300
0011000149311
0011001050322
0011001151333
0011010052344
0011010153355
0011011054366
0011011155377
0011100056388
0011100157399
00111010583A:
00111011593B;
00111100603C<
00111101613D=
00111110623E>
00111111633F?
二进制十进制十六进制图形
010000006440@
010000016541A
010000106642B
010000116743C
010001006844D
010001016945E
010001107046F
010001117147G
010010007248H
010010017349I
01001010744AJ
01001011754BK
01001100764CL
01001101774DM
01001110784EN
01001111794FO
010100008050P
010100018151Q
010100108252R
010100118353S
010101008454T
010101018555U
010101108656V
010101118757W
010110008858X
010110018959Y
01011010905AZ
01011011915B[
01011100925C\
01011101935D]
01011110945E^
01011111955F_
二进制十进制十六进制图形
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066Aj
011010111076Bk
011011001086Cl
011011011096Dm
011011101106En
011011111116Fo
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227Az
011110111237B{
011111001247C|
011111011257D}
011111101267E~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python:监控键盘输入、鼠标操作,并将捕获到的信息记录到文件中
Python中使用PyHook监听鼠标和键盘事件实例
用Python监听鼠标和键盘事件(转载)
SyntaxError: Non-ASCII character Python、Unicode和中文
Python字符编码详解
Python文本处理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服