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中的Matplotlib模块入门教程
Apr 15 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
python实现堆和索引堆的代码示例
Mar 19 Python
Python编程中NotImplementedError的使用方法
Apr 21 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
Python走楼梯问题解决方法示例
Jul 25 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
基于python判断目录或者文件代码实例
Nov 29 Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 Python
python开发的自动化运维工具ansible详解
Aug 07 Python
Pygame Rect区域位置的使用(图文)
Nov 17 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
Node.js实现数据推送
2016/04/14 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Django Admin实现上传图片校验功能
2016/03/06 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
Python3 log10()函数简单用法
2019/02/19 Python
django如何通过类视图使用装饰器
2019/07/24 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
中科软笔试题和面试题
2014/10/07 面试题
大学生个人自我鉴定
2013/12/03 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang