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 相关文章推荐
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
使用Python实现图像标记点的坐标输出功能
Aug 14 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
python实现统计代码行数的小工具
Sep 19 Python
python 初始化一个定长的数组实例
Dec 02 Python
TensorFlow打印输出tensor的值
Apr 19 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
python中的错误如何查看
Jul 08 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
Elasticsearch 基本查询和组合查询
Apr 19 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类中Static方法效率测试代码
2010/10/17 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
利用js对象弹出一个层
2008/03/26 Javascript
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
复习Python中的字符串知识点
2015/04/14 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python global和nonlocal用法解析
2020/02/03 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
2020/05/11 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
体育教师求职信
2014/06/30 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
清明节寄语2015
2015/03/23 职场文书
工作时间证明
2015/06/15 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
德劲DE1108畅想
2021/04/22 无线电
golang中的空slice案例
2021/04/27 Golang
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python