python 偷懒技巧——使用 keyboard 录制键盘事件

 更新时间:2020年09月21日 09:55:20   作者:starryland  
这篇文章主要介绍了python如何使用 keyboard 录制键盘事件,帮助大家提高工作效率,感兴趣的朋友可以了解下

之前在某本书上看到一个程序,可以通过 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)

可以使用如下代码制作一个简单的 “键盘录制器” (打印输出全局范围内的按键动作,并将按键顺序保存在文本文件中):

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()

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.")

其他的使用方式就不再一一列举了,可以参考 keyboard 项目的 Github 主页 。

几种常见的使用示例也已经包含在项目代码的 examples 目录下。

以上就是python 偷懒技巧——使用 keyboard 录制键盘事件的详细内容,更多关于python keyboard 录制键盘事件的资料请关注脚本之家其它相关文章!

相关文章

  • Python可变集合和不可变集合的构造方法大全

    Python可变集合和不可变集合的构造方法大全

    Python集合分为变集合和不可变集合两种,本文就详细的来介绍一下这两种集合的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • python实现的简单RPG游戏流程实例

    python实现的简单RPG游戏流程实例

    这篇文章主要介绍了python实现的简单RPG游戏流程,实例分析了Python实现RPG游戏流程的常用判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-06-06
  • python的描述器descriptor详解

    python的描述器descriptor详解

    这篇文章主要介绍了python的描述器descriptor详解,描述器可以用于控制属性的读取、写入和删除等操作,同时还可以用于实现计算属性、类属性、属性别名等高级功能,需要的朋友可以参考下
    2023-07-07
  • python根据出生日期获得年龄的方法

    python根据出生日期获得年龄的方法

    这篇文章主要介绍了python根据出生日期获得年龄的方法,涉及Python操作日期的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python实现钉钉/企业微信自动打卡的示例代码

    Python实现钉钉/企业微信自动打卡的示例代码

    这篇文章主要介绍了Python实现钉钉/企业微信自动打卡的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python音频处理的示例详解

    python音频处理的示例详解

    这篇文章主要介绍了python音频处理的示例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Python类的定义和使用详情

    Python类的定义和使用详情

    这篇文章主要介绍了Python类的定义与使用,类名只要是一个合法的标识符即可,但这仅仅满足的是 Python 的语法要求:如果从程序的可读性方面来看,Python 的类名必须是由一个或多个有意义的单词连缀而成的,下文基于这些基础内容展开介绍,需要的朋友可以参考一下
    2022-03-03
  • python实现自动发送邮件发送多人、群发、多附件的示例

    python实现自动发送邮件发送多人、群发、多附件的示例

    下面小编就为大家分享一篇python实现自动发送邮件发送多人、群发、多附件的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • python 列表元素左右循环移动 的多种解决方案

    python 列表元素左右循环移动 的多种解决方案

    这篇文章主要介绍了python 列表元素左右循环移动 的多种解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 分享10个有趣的Python程序

    分享10个有趣的Python程序

    这篇文章主要给大家分享的是10个有趣的Python程序,Python程序有许多模块和第三方包,这非常有助于高效编程,所以了解这些模块的正确使用方法是很重要的,下面详细内容,需要的小伙伴可以参考一下
    2022-02-02

最新评论