
前言
这里是【使用Python编写游戏辅助工具】的第二篇:键盘监听的应用。本文主要介绍使用
Python实现事件监听功能。
键盘监听是指通过编程的方式监控用户在键盘上的按键操作。
在这里键盘监听的主要用途是:
- 监听我们按下的按键,如果按下了指定的按钮,则执行我们预先设定的操作,从而实现一些可控的操作;
 
文章脉络概述
本文的流程和功能如下图所示:
-  
主要实现 键盘监听;
 -  
通过键盘监听事件去驱动一些操作(
键盘监听功能主要配合后面的鼠标连击使用);- 当按下 Ctrl + Shift + A 时候,进行 鼠标连击(键盘的组合键可以自定义)
 - 当按下 Ctrl + Shift + Q 时候,进行 停止连击(键盘的组合键可以自定义)
 
 
系列文章脉络
系列文章内容大体如下,后续可能会更新新的文章。
-  
点击直达:【使用Python编写游戏辅助工具】第一篇:概述
 -  
点击直达:【使用Python编写游戏辅助工具】第二篇:键盘监听的应用
 -  
点击直达:【使用Python编写游戏辅助工具】第三篇:鼠标连击器的实现
 -  
点击直达:【使用Python编写游戏辅助工具】第四篇:Windows窗口操作
 -  
点击直达:【使用Python编写游戏辅助工具】第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具
 
知识点📖📖
安装模块
pip install keyboard
 
据官方介绍,Keyboard 是可以在 Windows 和 Linux 上 hook 和模拟 全局键盘事件的一个模块。
这个模块就可以很好的实现本文的主题。
官网示例⚡⚡
本文的重点是 Keyboard模块,项目地址在这:https://github.com/boppreh/keyboard 。
笔者在这里不去详细介绍 keyboard 的功效,它的功能很强大,这里列举下常用的方法:
- 系统的学习应该去它的项目网站。
 
| 方法/函数 | 描述 | 
|---|---|
keyboard.is_pressed(key) | 检查给定的键是否当前按下。返回布尔值,表示键是否按下。 | 
keyboard.press(key) | 模拟按下给定的键。 | 
keyboard.release(key) | 模拟释放给定的键。 | 
keyboard.write(text) | 模拟键盘输入给定的文本。 | 
keyboard.press_and_release(key) | 模拟按下和释放给定的键。 | 
keyboard.hotkey(key1, key2, ..., keyN) | 模拟同时按下给定的多个键。 | 
keyboard.wait(key) | 阻塞程序,直到给定的键被按下。 | 
keyboard.add_hotkey(key, callback) | 注册一个热键,当按下指定的键时,调用指定的回调函数。 | 
keyboard.remove_hotkey(key) | 移除先前注册的热键。 | 
keyboard.read_event() | 阻塞程序,直到键盘事件发生,并返回一个keyboard.KeyboardEvent对象,包含有关事件的详细信息。 | 
keyboard.record(events=True) | 记录用户的键盘输入,并返回一个包含事件的列表。如果events为False,仅记录按键和释放事件(不包括其他事件)。 | 
代码
在官方示例拿来了这段 Example:https://github.com/boppreh/mouse#Example
- 这段代码展示了
keyboard库的一些常见用法,包括模拟按键操作、注册热键、记录和回放事件等。下面我来尝试解释一下这段代码。 
import keyboard
keyboard.press_and_release('shift+s, space')
keyboard.write('The quick brown fox jumps over the lazy dog.')
keyboard.add_hotkey('ctrl+shift+a', print, args=('triggered', 'hotkey'))
# Press PAGE UP then PAGE DOWN to type "foobar".
keyboard.add_hotkey('page up, page down', lambda: keyboard.write('foobar'))
# Blocks until you press esc.
keyboard.wait('esc')
# Record events until 'esc' is pressed.
recorded = keyboard.record(until='esc')
# Then replay back at three times the speed.
keyboard.play(recorded, speed_factor=3)
# Type @@ then press space to replace with abbreviation.
keyboard.add_abbreviation('@@', 'my.long.email@example.com')
# Block forever, like `while True`.
keyboard.wait()
 
代码释义
导入了keyboard模块
import keyboard
 
这行代码模拟按下并释放了组合键Shift+S,然后按下并释放了空格键。
keyboard.press_and_release('shift+s, space')
 
这行代码将字符串The quick brown fox jumps over the lazy dog.写入当前焦点的应用程序。相当于模拟了键盘的按键输入。
keyboard.write('The quick brown fox jumps over the lazy dog.')
 
这行代码注册了一个热键Ctrl+Shift+A,当用户按下该组合键时,回调函数print将被调用,并将参数('triggered', 'hotkey')传递给该回调函数。
keyboard.add_hotkey('ctrl+shift+a', print, args=('triggered', 'hotkey'))
 
这行代码注册了一个热键Page Up, Page Down,当用户按下该组合键时,将调用一个匿名函数,该匿名函数会将字符串foobar写入当前焦点的应用程序。
keyboard.add_hotkey('page up, page down', lambda: keyboard.write('foobar'))
 
这行代码阻塞程序,直到用户按下Esc键为止。
keyboard.wait('esc')
 
这行代码记录键盘事件,直到用户按下Esc键为止,并将记录的事件存储在recorded变量中。
recorded = keyboard.record(until='esc')
 
这行代码将之前记录的键盘事件以三倍的速度回放。
keyboard.play(recorded, speed_factor=3)
 
这行代码注册了一个缩写,当用户输入@@并按下空格键时,会自动替换为my.long.email@example.com。
keyboard.add_abbreviation('@@', 'my.long.email@example.com')
 
这行代码将程序无限阻塞,类似于while True的效果,直到用户终止程序。
keyboard.wait()
 
键盘监听 实现✨✨
因为本篇文章需要实现的是监听键盘操作,所以需要关心的是 keyboard 的两个操作:
- keyboard.add_hotkey:注册热键,接受一个热键和回调函数;
 - keyboard.wait:监听程序,直到给定的键被按下。
 
代码
代码释义
这段代码使用了keyboard模块来监听键盘事件,并通过热键来触发回调函数。它的主要作用是:
- 定义了两个回调函数
start_keyboard_listener和stop_keyboard_listener,分别用于开始和停止键盘监听; - 使用
keyboard.add_hotkey函数注册热键,将热键和相应的回调函数绑定起来。在本例中,按下Ctrl+Shift+A将调用start_keyboard_listener,按下Ctrl+Shift+Q将调用stop_keyboard_listener; - 在主程序中,通过
keyboard.wait('ctrl+c')进入监听状态,等待用户按下Ctrl+C来终止程序。 
请注意,代码中的time.sleep(5)用于模拟执行某些操作时的时间延迟,可以根据需要进行调整或移除。
另外,except KeyboardInterrupt用于捕获用户按下Ctrl+C的中断信号,以便优雅地退出程序或执行相应的处理逻辑。
import time
import keyboard
def start_keyboard_listener():
    """
    开始键盘监听的回调函数
    """
    print("Ctrl+Shift+A pressed")
    time.sleep(5)
    # do something
def stop_keyboard_listener():
    """
    停止键盘监听的回调函数
    """
    print("Ctrl+Shift+Q pressed")
    time.sleep(5)
    # do something
# 注册热键,设置回调函数
keyboard.add_hotkey('Ctrl+Shift+A', start_keyboard_listener)
keyboard.add_hotkey('Ctrl+Shift+Q', stop_keyboard_listener)
# 进入监听状态
try:
    keyboard.wait('ctrl+c')
except KeyboardInterrupt:
    ...
 
运行效果
可以清楚的看到(看坐上角的 键盘显示),
- 当按下键盘的 Ctrl + Shift + A 时候,执行了start_keyboard_listener函数;
 - 当按下键盘的 Ctrl + Shift + Q 时候,执行了 stop_keyboard_listener函数。
 

总结🎈🎈
本文介绍了 利用keyboard模块 的基本使用,并且实现键盘监听的操作,
- 主要使用 keyboard 的 add_hotkey 和 wait 两个方法来实现。
 
应用场景如下:
- 快捷键操作:通过监听特定的快捷键,实现在特定情况下执行某些操作。例如,当按下
Ctrl+Shift+A时开始执行某个任务,按下Ctrl+Shift+Q时停止执行任务。 - 自动化脚本:在需要进行键盘监听的自动化脚本中使用。可以根据特定的键盘输入触发相应的操作,从而实现自动化任务的执行。例如,在某个特定的键盘事件发生时,自动触发截图、记录日志等操作。
 - 辅助工具开发:作为开发辅助工具的一部分,监听键盘事件,以便在特定的触发条件下执行相应的操作。例如,当按下特定的组合键时,显示帮助信息或执行调试操作。
 
总之,本文代码可以用于监听键盘事件,并根据特定的键盘输入触发相应的操作,与后面的文章结合使用,用以实现鼠标连击的收放自如。





![[PHP]帮管客CRM客户管理系统 v5.1.0](https://img-blog.csdnimg.cn/96e8929497da4659b2f64cef962201b0.png)










![[H5动画制作系列]坐标转化问题一次搞清,一了百了](https://img-blog.csdnimg.cn/45839170544b4cf292e242a498fb82b3.png)


