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 21 Python
Python 抓取动态网页内容方案详解
Dec 25 Python
Python中优化NumPy包使用性能的教程
Apr 23 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
Dec 25 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
python 读取串口数据的示例
Nov 09 Python
Python中X[:,0]和X[:,1]的用法
May 10 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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 引用(&)详解
2009/11/20 PHP
php编写一个简单的路由类
2011/04/13 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php里array_work用法实例分析
2015/07/13 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
php实现微信模板消息推送
2018/03/30 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
网上抓的一个特效
2007/05/11 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
vue设置一开始进入的页面教程
2019/10/28 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python程序快速缩进多行代码方法总结
2019/06/23 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
后勤主管工作职责
2013/12/07 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
运动会入场解说词
2014/02/07 职场文书
教师业务培训方案
2014/05/01 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
军训决心书范文
2015/09/22 职场文书