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格式化压缩后的JS文件的方法
Mar 05 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
python中int与str互转方法
Jul 02 Python
Python双向循环链表实现方法分析
Jul 30 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 Python
python将控制台输出保存至文件的方法
Jan 07 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
关于python 跨域处理方式详解
Mar 28 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
python中类与对象之间的关系详解
Dec 16 Python
python四种出行路线规划的实现
Jun 23 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提示Notice: Undefined variable的解决办法
2012/11/24 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python将文本中的空格替换为换行的方法
2018/03/19 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
django删除表重建的实现方法
2019/08/28 Python
Python绘制热力图示例
2019/09/27 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
关于毕业的广播稿
2014/01/10 职场文书
宿舍打麻将检讨书
2014/01/24 职场文书
八一建军节活动方案
2014/02/10 职场文书
银行求职信怎么写
2014/05/26 职场文书
温馨提示标语
2014/06/26 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
董事长助理岗位职责
2015/02/11 职场文书
刑事起诉书范文
2015/05/19 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
JS setTimeout与setInterval的区别
2022/04/20 Javascript