Python中使用PyHook监听鼠标和键盘事件实例


Posted in Python onJuly 18, 2014

PyHook是一个基于Python的“钩子”库,主要用于监听当前电脑上鼠标和键盘的事件。这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所以PyHook也只能运行在Windows平台。

关于PyHook的使用,在它的官方主页上就有一个简单的教程,大体上来说,可以这样使用

# -*- coding: utf-8 -*- # 
 3import pythoncom 
 4import pyHook  
 5def onMouseEvent(event): 
  
  # 监听鼠标事件   
  print "MessageName:",event.MessageName   
  print "Message:", event.Message   
  print "Time:", event.Time   
  print "Window:", event.Window   
  print "WindowName:", event.WindowName   
  print "Position:", event.Position   
  print "Wheel:", event.Wheel   
  print "Injected:", event.Injected      
  print"---"
 
  # 返回 True 以便将事件传给其它处理程序   
  # 注意,这儿如果返回 False ,则鼠标事件将被全部拦截   
  # 也就是说你的鼠标看起来会僵在那儿,似乎失去响应了   
  return True
 
23def onKeyboardEvent(event):
 # 监听键盘事件   
  print "MessageName:", event.MessageName   
  print "Message:", event.Message   
  print "Time:", event.Time   
  print "Window:", event.Window   
  print "WindowName:", event.WindowName   
  print "Ascii:", event.Ascii, chr(event.Ascii)   
  print "Key:", event.Key   
  print "KeyID:", event.KeyID   
  print "ScanCode:", event.ScanCode   
  print "Extended:", event.Extended   
  print "Injected:", event.Injected   
  print "Alt", event.Alt   
  print "Transition", event.Transition   
  print "---"   
  # 同鼠标事件监听函数的返回值   
  return True 

42def main():   
  # 创建一个“钩子”管理对象   
  hm = pyHook.HookManager()   
  # 监听所有键盘事件   
  hm.KeyDown = onKeyboardEvent   
  # 设置键盘“钩子”   
  hm.HookKeyboard()   
  # 监听所有鼠标事件   
  hm.MouseAll = onMouseEvent   
  # 设置鼠标“钩子”   
  hm.HookMouse()   
  # 进入循环,如不手动关闭,程序将一直处于监听状态   
  pythoncom.PumpMessages() 

56if __name__ == "__main__":   
  main()

运行上面的脚本,试试看移动一下鼠标,或者按一下键盘(比如开一个记事本程序,随便写点东西),看看这个脚本输出了什么。你会发现,你的鼠标、键盘的每一个动作都被它捕捉到并打印出来了。

另外,需要注意上面两个监听函数的返回值。这两个函数可以没有返回值(实际上返回的是 None),如果有返回值的话,如果返回值为 True,则这个脚本在捕捉、处理对应的事件后会把事件继续传递下去,如果返回值为 False,则事件将会被阻塞在这儿,具体来说,就是你的鼠标或键盘将不再有响应。

有了 PyHook,我们可以做很多有趣的事情:比如记录一下自己一天鼠标的轨迹,再结合别的程序画一张图出来;或者记录一下你每天的按键记录,看看键盘上哪些 键你按得最多;如果你很坏,还可以把它悄悄地装在别人的电脑中,看一看那个人一天都做了些什么;当然,由于 PyHook 还可以取得当前窗口的标题(WindowName),你还可以记录下来一天之中你在各个程序上花费了多少时间,看看自己有多少时间在看网页、多少时间在聊 天、多少时间在真正地工作,呵呵。

Python 相关文章推荐
Python中用Spark模块的使用教程
Apr 13 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
python中使用pyhook实现键盘监控的例子
Jul 18 #Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 #Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 #Python
python采集博客中上传的QQ截图文件
Jul 18 #Python
Python下singleton模式的实现方法
Jul 16 #Python
python的迭代器与生成器实例详解
Jul 16 #Python
Python的内存泄漏及gc模块的使用分析
Jul 16 #Python
You might like
PHP 万年历实现代码
2012/10/18 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
python3实现暴力穷举博客园密码
2016/06/19 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Python3中详解fabfile的编写
2018/06/24 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
小学教师学期末自我评价
2013/09/25 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
代办委托书怎样写
2014/04/08 职场文书
找工作求职信
2014/07/07 职场文书
小学生暑假生活总结
2015/07/13 职场文书
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL