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字典简介以及用法详解
Nov 15 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
Python subprocess库的使用详解
Oct 26 Python
用Python将结果保存为xlsx的方法
Jan 28 Python
python简单验证码识别的实现方法
May 10 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 Python
Python 必须了解的5种高级特征
Sep 10 Python
python 两种方法删除空文件夹
Sep 29 Python
Python Django项目和应用的创建详解
Nov 27 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文件缓存内容保存格式实例分析
2014/08/20 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
网站上面有这种切换效果
2006/06/26 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python全栈之列表数据类型详解
2019/10/01 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
小结Python的反射机制
2020/09/28 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
什么是索引指示器
2012/08/20 面试题
公司财务自我评价分享
2013/12/17 职场文书
科研先进个人典型材料
2014/01/31 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript