本文主要介绍一下使用Python进行事件监听功能,以实现一些特有的操作。本文旨在介绍如何实现这一功能。
笔者根据一些需求写了一个小工具,流程和功能如下图所示(实际功能有更多):
该工具主要实现了 键盘监听 和 鼠标连击;
通过键盘监听事件去驱动 鼠标做一些操作;
工具的雏形参考这里:
Python实现《咸鱼之王》后台挂机 和 鼠标连点器
这个工具主要用于鼠标连击,但是实现的不仅仅鼠标连击,本文介绍的却是 键盘监听事件,真是古怪也哉!
本文的重点是 Keyboard模块,Github地址在这:https://github.com/boppreh/keyboard 。
安装模块
pip install keyboard
据官方介绍,Keyboard 是可以在 Windows 和 Linux 上 hook 和模拟 全局键盘事件的一个模块。
这个模块就可以很好的实现本文的主题了。
笔者在这里不去详细介绍 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('@@', '[email protected]')
# 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)
这行代码注册了一个缩写,当用户输入@@
并按下空格键时,会自动替换为[email protected]
。
keyboard.add_abbreviation('@@', '[email protected]')
这行代码将程序无限阻塞,类似于while True
的效果,直到用户终止程序。
keyboard.wait()
因为本篇文章需要实现的是监听键盘操作,所以需要关心的是 keyboard 的两个操作:
代码释义
这段代码使用了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:
...
可以清楚的看到(注意看左上角的 显示键盘程序),
本文介绍了 利用keyboard模块 的基本使用,并且实现键盘监听的操作,
应用场景如下:
Ctrl+Shift+A
时开始执行某个任务,按下Ctrl+Shift+Q
时停止执行任务。总之,本文代码可以用于监听键盘事件,并根据特定的键盘输入触发相应的操作,具体的应用场景取决于需求和实际情况。
本次分享到此结束,
see you~~