python 偷懒技巧——使用 keyboard 录制键盘事件


Posted in Python onSeptember 21, 2020

之前在某本书上看到一个程序,可以通过 Python 记录下全局范围内的键盘事件,使用的是 ctypes 库。
后来几经尝试,始终不能成功运行。原来它只支持 Python2 和 32 位的 Windows 系统。。。Excuse me?
于是在网上查找可行的替代方案,比如 pyHook 。呃,不合胃口。安装比较繁琐(有依赖库且不能通过 pip 命令安装),只支持 Windows 系统,况且又是十年前就没再更新的项目。。。看了下函数调用也算不上简洁直观。

后来又多番搜索,终于找到了一个名为keyboard 的 Python 库,可以绑定全局事件、录制及模拟键盘输入、设置热键等。
尤其是安装和使用足够简单,比较合我的心意(毕竟 Github 上将近 1.5K 的小星星)。

一、特性

  • 全局范围内的键盘事件绑定。即程序可以后台运行,捕捉其他软件下的按键动作。
  • 跨平台,支持 Windows 、Linux 以及 MacOS 系统。支持 Python2 和 Python3 。
  • 纯 Python 代码,无需编译 C 语言模块。无依赖库,安装简单(只是复制文件就可以)。
  • 通过独立的线程捕捉事件,不阻塞主程序的运行。
  • 很详细的文档,参见项目主页的 README 。

其实我真的有点感觉,这才是我心目中比较“现代”的工具。

二、录制及模拟按键动作

就像前面提到的,安装 keyboard 的流程非常简单,无需考虑任何兼容性或者依赖问题,只需要一条简短的命令:

$ pip install keyboard

可以使用下面的代码录制 10 秒钟的键盘事件,并将其回放一遍(即重复按下之前操作的按键):

import keyboard
import time

keyboard.start_recording()
time.sleep(10)
events = keyboard.stop_recording()
keyboard.replay(events)

python 偷懒技巧——使用 keyboard 录制键盘事件

可以使用如下代码制作一个简单的 “键盘录制器” (打印输出全局范围内的按键动作,并将按键顺序保存在文本文件中):

import keyboard

def print_pressed_keys(e):
  line = ', '.join(str(code) for code in keyboard._pressed_events)
  print(line)

  with open('keylogger.txt', 'a+') as f:
    f.write(line + '\n')

keyboard.hook(print_pressed_keys)
keyboard.wait()

python 偷懒技巧——使用 keyboard 录制键盘事件

PS:上述代码中的 code 并不是对应按键的 ASCII 码,而是根据键盘布局为按键指定的数值(如 a 键为 30,b 键为 42 等等),可以通过自行测试确认具体的对应关系。

如同时按下两个或多个按键,则上述程序会以 code, code... 的形式输出。

三、热键捕获及绑定

可以使用如下代码录制热键并为该热键绑定上特定的触发事件:

import keyboard

print('Press and release your desired hotkey: ')
hotkey = keyboard.read_hotkey()
print('Hotkey selected: ', hotkey)

def on_triggered():
  print("Triggered!")

keyboard.add_hotkey(hotkey, on_triggered)
print("Press ESC to stop.")

python 偷懒技巧——使用 keyboard 录制键盘事件

其他的使用方式就不再一一列举了,可以参考 keyboard 项目的 Github 主页 。

几种常见的使用示例也已经包含在项目代码的 examples 目录下。

以上就是python 偷懒技巧——使用 keyboard 录制键盘事件的详细内容,更多关于python keyboard 录制键盘事件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python重试装饰器示例
Feb 11 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
详细分析python3的reduce函数
Dec 05 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
selenium+python自动化测试之环境搭建
Jan 23 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
简单了解python关键字global nonlocal区别
Sep 21 #Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 #Python
python 字符串格式化的示例
Sep 21 #Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 #Python
属性与 @property 方法让你的python更高效
Sep 21 #Python
Python如何在bool函数中取值
Sep 21 #Python
python 密码学示例——凯撒密码的实现
Sep 21 #Python
You might like
PHP无限分类的类
2007/01/02 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
php时间戳转换代码详解
2019/08/04 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
express 项目分层实践详解
2018/12/10 Javascript
python复制文件的方法实例详解
2015/05/22 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Python 爬虫的工具列表大全
2016/01/31 Python
详解python3百度指数抓取实例
2016/12/12 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
绝对经典成功的大学生推荐信
2013/11/08 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
颁奖晚会主持词
2014/03/25 职场文书
高中生班主任评语
2014/04/25 职场文书
合作合同协议书范本
2015/01/27 职场文书
电影雷锋观后感
2015/06/10 职场文书
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏