Pynput 是一个 Python 第三方库,它提供了监听和控制键盘和鼠标事件的功能。使用 pynput,我们可以编写自动化脚本,监控输入设备的活动,或者实现一些与键盘和鼠标相关的功能。
python
from pynput import mouse, keyboard
def on_mouse_move(x, y):
print(f'鼠标移动到位置: ({x}, {y})')
def on_mouse_click(x, y, button, pressed):
if pressed:
print(f'{button} 按下于位置: ({x}, {y})')
else:
print(f'{button} 释放于位置: ({x}, {y})')
def on_mouse_scroll(x, y, dx, dy):
# dx 和 dy 表示滚动的水平方向和垂直方向的量
# 在大多数鼠标上,只有 dy 会变化,表示垂直滚动
print(f'Scrolled at {x}, {y} ({dx}, {dy})')
def on_key_press(key):
try:
print(f'{key.char} 被按下')
except AttributeError:
print(f'{key} 被按下')
def on_key_release(key):
try:
if key == keyboard.Key.esc:
print('结束监听,退出!')
keyboard_listener.stop()
mouse_listener.stop()
else :
print(f'{key.char} 被释放')
except AttributeError:
print(f'{key} 被释放')
# 创建鼠标监听器
mouse_listener = mouse.Listener(on_move=on_mouse_move, on_click=on_mouse_click,on_scroll=on_mouse_scroll)
mouse_listener.start()
# 创建键盘监听器,同时监听按下和释放事件
keyboard_listener = keyboard.Listener(on_press=on_key_press, on_release=on_key_release)
keyboard_listener.start()
# 等待监听器运行,直到用户手动停止
try:
mouse_listener.join()
keyboard_listener.join()
except KeyboardInterrupt:
pass # 捕获 Ctrl+C 来停止监听器
finally:
# 停止监听器
mouse_listener.stop()
keyboard_listener.stop()
这段代码使用了 pynput
库来监听鼠标和键盘事件。pynput
是一个用于控制和监控输入设备的Python库,它允许用户监听鼠标和键盘事件,以及发送鼠标和键盘命令。
代码结构:
-
导入模块 :
from pynput import mouse, keyboard
导入pynput
库中的mouse
和keyboard
模块。 -
定义鼠标事件处理函数:
on_mouse_move(x, y)
:当鼠标移动时调用,打印鼠标的当前位置。on_mouse_click(x, y, button, pressed)
:当鼠标按键被按下或释放时调用,根据pressed
参数的值打印鼠标按键的状态(按下或释放)以及位置。
-
定义键盘事件处理函数:
on_key_press(key)
:当键盘按键被按下时调用,尝试打印按键的字符表示(如果有的话),否则打印按键本身。on_key_release(key)
:当键盘按键被释放时调用,行为类似于on_key_press
,但针对按键释放事件。
-
创建并启动鼠标监听器 :使用
mouse.Listener
创建一个鼠标监听器,并传入之前定义的鼠标事件处理函数。然后调用start()
方法开始监听。 -
创建并启动键盘监听器 :使用
keyboard.Listener
创建一个键盘监听器,并传入之前定义的键盘事件处理函数。然后调用start()
方法开始监听。 -
等待监听器运行 :使用
try...except...finally
语句块来确保监听器能够优雅地启动和停止。mouse_listener.join()
和keyboard_listener.join()
会阻塞主线程,直到监听器停止。KeyboardInterrupt
异常用于捕获用户通过Ctrl+C
发送的中断信号。 -
停止监听器 :在
finally
语句块中,无论是否发生异常,都会调用mouse_listener.stop()
和keyboard_listener.stop()
来停止监听器。
功能说明:
- 当你移动鼠标时,会在控制台打印出鼠标的当前位置。
- 当你按下或释放鼠标按键时,会在控制台打印出按键的状态(按下或释放)以及位置。
- 当你按下或释放键盘按键时,会在控制台打印出按键的字符表示(如果有的话)或按键本身。
这段代码适用于需要监控鼠标和键盘输入的应用场景,例如自动化测试、用户行为分析、游戏脚本等。注意,在实际应用中,可能需要处理更多的异常和边界情况,以确保程序的健壮性。