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中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
用scikit-learn和pandas学习线性回归的方法
Jun 21 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 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
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
python使用xmlrpc实例讲解
2013/12/17 Python
Python编程之属性和方法实例详解
2015/05/19 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
教学实验楼管理制度
2014/02/01 职场文书
高中英语教学反思
2014/02/04 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
房地产开盘策划方案
2014/02/10 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
1000字打架检讨书
2014/11/03 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
2015年教师节广播稿
2015/08/19 职场文书
Django框架模板用法详解
2022/06/10 Python