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使用xauth方式登录饭否网然后发消息
Apr 11 Python
Python脚本处理空格的方法
Aug 08 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
使用python编写简单的小程序编译成exe跑在win10上
Jan 15 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
Python 字符串与数字输出方法
Jul 16 Python
基于python3实现socket文件传输和校验
Jul 28 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
简单了解python代码优化小技巧
Jul 08 Python
Django中URL的参数传递的实现
Aug 04 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 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制作静态网站的模板框架
2006/10/09 PHP
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
分享php分页的功能模块
2015/06/16 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
Python实现的tab文件操作类分享
2014/11/20 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
详解python中sort排序使用
2019/03/23 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
园林施工员岗位职责
2013/12/11 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
生物学学生自我评价
2014/01/17 职场文书
学生打架检讨书
2014/10/20 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
时尚女魔头观后感
2015/06/04 职场文书
二婚主持词
2015/06/30 职场文书
学习心得体会
2019/06/20 职场文书
七年级上册生物的课件
2019/08/07 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python