PyHook底层还是使用windows API实现,而我们可以直接拿来用的相关函数定义都在Python\Lib\site-packages\PyHook3下的HookManager.py文件中。
因为官方并没给出一个API文档,所以我自己看了一下源文件,发现其实PyHook的方法很少,用法也很简单,基本上example.py中大概都给出了。下面也是通过对example.py给出的例子的解析来了解编写过程。

1. 创建HookManager对象

import PyHook3hm = PyHook3.HookManager()

之后的操作都是基于这个Manager对象进行。

2. 编写事件处理函数

事件处理函数需要传入一个HookEvent对象,这个类有两个子类,一个为鼠标事件MouseEvent,还有一个为键盘事件KeyboardEvent,分别为当触发相应事件时由系统传入。
MouseEvent及KeyboardEvent又分别有多个属性,代表所触发事件的具体信息。example.py已经列出了所有属性,通过对example.py例子的注释,大概就能清楚了:

# 鼠标事件处理函数
def OnMouseEvent(event):print('MessageName:',event.MessageName)  #事件名称print('Message:',event.Message)          #windows消息常量 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#键盘事件处理函数
def 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))   #按键的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)                          #是某同时按下Altprint('Transition', event.Transition)            #判断转换状态print('---')# 同上return True

如果想了解具体含义,可以参考windows编程中的相关消息及参数含义。

3. 绑定事件处理函数

hm.MouseAllButtonsDown = OnMouseEvent #将OnMouseEvent函数绑定到MouseAllButtonsDown事件上
hm.KeyDown = OnKeyboardEvent          #将OnKeyboardEvent函数绑定到KeyDown事件上

除此之外,还有以下事件:
鼠标事件:
MouseAll
MouseAllButtons
MouseAllButtonsUp
MouseAllButtonsDown
MouseAllButtonsDbl
MouseWheel
MouseMove
MouseLeftUp
MouseLeftDown
MouseLeftDbl
MouseRightUp
MouseRightDown
MouseRightDbl
MouseMiddleUp
MouseMiddleDown
MouseMiddleDbl
键盘事件:
KeyUp
KeyDown
KeyChar
KeyAll
因为都可以顾名思义,也就不再做注释。

4. 设置钩子

hm.HookMouse()        #设置鼠标钩子
hm.HookKeyboard()   #设置键盘钩子

5. 循环监听

对于命令行界面的编程,设置了钩子后还不够,因为脚本在成功挂钩后,就结束运行了。这个时候就需要使程序进入循环监听系统事件的状态。
比较简单的方法是使用Win32 Extensions package提供的PumpMessages()方法:

  import pythoncompythoncom.PumpMessages()

但是这个函数不是PyHook编程中必需的。如果是基于某些GUI库的编程,则不需要这样,因为GUI库本身就具有监听消息循环的机制。

6. 取消钩子

hm.UnhookMouse()    #取消鼠标钩子
hm.UnhookKeyboard() #取消键盘钩子

PyHook3简明教程相关推荐

  1. CGIC简明教程(转摘)

    CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. *********************************     基础 ...

  2. kangle web server源代码安装简明教程

    kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...

  3. CentOs6.5中安装和配置vsftp简明教程

    这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下 一.vsftp安装篇 复制代码代码如下: # 安装vsftpd yum -y install vsftpd # ...

  4. sqlalchemy mysql_SQLAlchemy简明教程

    原文可见:SQLAlchemy简明教程 - Jiajun的编程随想 SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分: ORM,就是我们用类来表示数据库schema ...

  5. python tcp server_python scoket 编程 | tcp server client - 简明教程

    TCP 和 UDP 的区别 这两个协议都是传输层的协议,解决的问题,都是端口与端口的通信问题. TCP 每次建立通信,都需要三次握手,确定双方状态完毕,在发送数据.如果发送的数据出现了异常,TCP 也 ...

  6. 简明python教程pdf-python简明教程中文pdf

    python简明教程中文pdf电子书是作者通过自己对计算机语言多年来的研究和学习得出的学习经验,对于python新手来说非常有用,值得大家下载学习. python简明教程中文pdf文章目录 1.介绍 ...

  7. 简明python教程在线-Python简明教程

    Python简明教程在线阅读地址: https://bop.molun.net/ DocStrings 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行,后 ...

  8. linux 防火墙iptables简明教程

    前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...

  9. Python re(正则表达式)简明教程

    Python re(正则表达式)简明教程(Python3) 举个栗子 常用函数举例 按字母顺序查询模块

  10. Python类简明教程

    Python类简明教程

最新文章

  1. 哆啦a梦简单图画python编程_[python]画哆啦A梦,Python,绘制
  2. WatchStor观察:思科携EMC等合作伙伴 圈地数据中心市场
  3. AAAI 2021 | 情感分析最新进展解读
  4. U盘安装LINUX系统,拔除U盘后无法引导系统
  5. 采用UDP协议实现PIC18F97J60 ethernet bootloader
  6. springmvc教程(3)
  7. 使用vue脚手架模块化开发
  8. android accessibility 模拟返回_Android无障碍宝典
  9. python连接mysql代码_Python3连接MySQL(pymysql)转账代码
  10. 发票查验、发票识别API
  11. 计算机网络知识点——4.介质访问控制子层
  12. 查询批量文件中关键数据方法--uedit32工具
  13. python爬取糗事百科超搞笑图片
  14. 如果再回到2013年
  15. 处理vcf文本设计多态性indel标记--GATK、vcf
  16. 程序员如何告别加班-加班原因总结
  17. musi算法使用简记
  18. 四川山海蓝图抖音橱窗和抖音小店的区别
  19. Oracle告别sql语句错误
  20. 站长在线Python精讲:在Python中使用正则表达式的sub()方法替换字符串详解

热门文章

  1. OpenCV学习——图像二值化处理及二维傅里叶变换
  2. linux错误命令数字,Linux 命令及踩坑
  3. android translate 参数,关于安卓的TranslateAnimation的使用
  4. word to latex 2.56安装方法
  5. hp-unix 自带磁带机备份数据
  6. 《深度卷积神经网络原理与实践》笔记 第二、三章 卷积神经网络原理及典型结构
  7. 《钻哥学管理之现代管理学》(Yanlz+Unity+SteamVR+云技术+5G+AI=VR云游戏=技术+业务+管理+现代管理学+决策+组织+人事+领导+激励+协调+控制+系统分析+立钻哥哥+==)
  8. IntelliJ IDEA破解
  9. 微信小程序:网课查题微信小程序源码下载,题库资源丰富自动采集,支持语音拍照识别
  10. svn忽略文件不提交