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实现的一个找零钱的小程序代码分享
Aug 25 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
Python常见数字运算操作实例小结
Mar 22 Python
pytorch 输出中间层特征的实例
Aug 17 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
十个Python自动化常用操作,即拿即用
May 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
用PHP读取IMAP邮件
2006/10/09 PHP
PHP制作图型计数器的例子
2006/10/09 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
js Html结构转字符串形式显示代码
2011/11/15 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
Python基于time模块求程序运行时间的方法
2017/09/18 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
自考毕业自我鉴定范文
2013/10/27 职场文书
音乐器材管理制度
2014/01/31 职场文书
保护环境建议书300字
2014/05/13 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
毕业生见习报告总结
2014/11/08 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis
MySQL 数据 data 基本操作
2022/05/04 MySQL