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解析XML的四种方式
Mar 30 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
Python排序算法实例代码
Aug 10 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
python 图像平移和旋转的实例
Jan 10 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
python小白切忌乱用表达式
May 29 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
Python排序函数的使用方法详解
Dec 11 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
PHP连接access数据库
2015/03/27 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
Python中变量交换的例子
2014/08/25 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
python的else子句使用指南
2016/02/27 Python
Python中super()函数简介及用法分享
2016/07/11 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
python实现机器学习之元线性回归
2018/09/06 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
Python中os模块功能与用法详解
2020/02/26 Python
Python递归函数特点及原理解析
2020/03/04 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
可靠的数据流传输TCP
2016/03/15 面试题
2014年纪检工作总结
2014/11/12 职场文书
党校个人总结
2015/03/04 职场文书
早恋主题班会
2015/08/14 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
python 网络编程要点总结
2021/06/18 Python