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实现监控windows服务并自动启动服务示例
Apr 17 Python
python字典多条件排序方法实例
Jun 30 Python
python基于socket实现网络广播的方法
Apr 29 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
python实现聊天小程序
Mar 13 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
Python实现ATM系统
Feb 17 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
python collections模块的使用
Oct 16 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
javascript设计模式 接口介绍
2012/07/24 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
JavaScript中的继承方式详解
2015/02/11 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
批处理与python代码混合编程的方法
2016/05/19 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python游戏开发的五个案例分享
2020/03/09 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
django有哪些好处和优点
2020/09/01 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
普通院校学生的自荐信
2013/11/27 职场文书
医院标语大全
2014/06/23 职场文书
运动会加油稿20字
2014/11/15 职场文书
python+opencv实现视频抽帧示例代码
2021/06/11 Python
Android Studio 计算器开发
2022/05/20 Java/Android