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生成随机密码
Mar 10 Python
python实现超简单端口转发的方法
Mar 13 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python 字典修改键(key)的几种方法
Aug 10 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
Python values()与itervalues()的用法详解
Nov 27 Python
QML用PathView实现轮播图
Jun 03 Python
Python中random模块常用方法的使用教程
Oct 04 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 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
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
Python中字典的基础知识归纳小结
2015/08/19 Python
Python实现简单字典树的方法
2016/04/29 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python实现中值滤波去噪方式
2019/12/18 Python
jupyter notebook 重装教程
2020/04/16 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
送给程序员的20个Java集合面试问题
2014/08/06 面试题
电力公司个人求职信范文
2014/02/04 职场文书
秋季运动会活动方案
2014/02/05 职场文书
纪律教育月活动总结
2014/08/26 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
先进个人推荐材料
2014/12/29 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
上学路上观后感
2015/06/16 职场文书
药房管理制度范本
2015/08/06 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
golang interface判断为空nil的实现代码
2021/04/24 Golang
Axios取消重复请求的方法实例详解
2021/06/15 Javascript