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中for循环详解
Jan 17 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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
如何过滤高亮显示非法字符
2006/10/09 PHP
php 文章调用类代码
2011/08/11 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
2015/01/19 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
浅谈javascript中的 “ && ” 和 “ || ”
2017/02/02 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
高中综合实践活动总结
2014/07/07 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS
create-react-app开发常用配置教程
2022/06/25 Javascript