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实现通过shelve修改对象实例
Sep 26 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
解决python3 json数据包含中文的读写问题
May 10 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
详解python中的数据类型和控制流
Aug 08 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
python wxpython 实现界面跳转功能
Dec 17 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
python开发一款翻译工具
Oct 10 Python
python编写扎金花小程序的实例代码
Feb 23 Python
python前后端自定义分页器
Apr 13 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
php自动适应范围的分页代码
2008/08/05 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
js实现内置计时器
2019/12/16 Javascript
Python 字符串定义
2009/09/25 Python
python获取糗百图片代码实例
2013/12/18 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Python实现中值滤波去噪方式
2019/12/18 Python
python 类之间的参数传递方式
2019/12/20 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
自我评价的写作规则
2014/01/06 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
服装店营销方案
2014/03/10 职场文书
西安兵马俑导游词
2015/02/02 职场文书
元宵节寄语大全
2015/02/27 职场文书
创业计划书之便利店
2019/09/05 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python
Go并发4种方法简明讲解
2022/04/06 Golang
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL