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排序搜索基本算法之希尔排序实例分析
Dec 09 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
Python读写及备份oracle数据库操作示例
May 17 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
python实现维吉尼亚算法
Mar 20 Python
python多线程http压力测试脚本
Jun 25 Python
Python实现个人微信号自动监控告警的示例
Jul 03 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
浅析Python中的随机采样和概率分布
Dec 06 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导入Excel到MySQL的方法
2011/04/23 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
python使用socket向客户端发送数据的方法
2015/04/29 Python
简单了解django缓存方式及配置
2019/07/19 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
python 异步async库的使用说明
2020/05/04 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
食品安全检查制度
2014/02/03 职场文书
工程安全员岗位职责
2014/03/09 职场文书
节能标语大全
2014/06/21 职场文书
运动会广播稿200字
2014/10/18 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL