PyNput 详细教程
PyNput 是一个 Python 库,用于控制和监控输入设备(键盘和鼠标)。它允许你监听输入事件(如按键和鼠标点击),也可以模拟输入操作。本教程将详细介绍 PyNput 的使用方法。
安装
pip install pynput
键盘控制
1. 监控键盘输入
from pynput import keyboard
def on_press(key):
try:
print(f'字母键 {key.char} 被按下')
except AttributeError:
print(f'特殊键 {key} 被按下')
def on_release(key):
print(f'{key} 被释放')
if key == keyboard.Key.esc:
# 停止监听
return False
# 监听键盘事件
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
2. 模拟键盘输入
from pynput.keyboard import Controller, Key
keyboard = Controller()
# 输入字符串
keyboard.type('Hello World!')
# 按下和释放特殊键
keyboard.press(Key.ctrl)
keyboard.press('c')
keyboard.release('c')
keyboard.release(Key.ctrl)
鼠标控制
1. 监控鼠标输入
from pynput import mouse
def on_move(x, y):
print(f'鼠标移动到 ({x}, {y})')
def on_click(x, y, button, pressed):
print(f'{button} 在 ({x}, {y}) {"按下" if pressed else "释放"}')
if not pressed:
# 停止监听
return False
def on_scroll(x, y, dx, dy):
print(f'在 ({x}, {y}) 滚动 {"下" if dy < 0 else "上"}')
# 监听鼠标事件
with mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
listener.join()
2. 模拟鼠标操作
from pynput.mouse import Controller, Button
mouse = Controller()
# 获取当前鼠标位置
print(f'当前鼠标位置: {mouse.position}')
# 设置鼠标位置
mouse.position = (100, 200)
# 移动鼠标相对位置
mouse.move(50, -50)
# 点击鼠标
mouse.click(Button.left, 2) # 双击左键
# 按下和释放鼠标按钮
mouse.press(Button.left)
mouse.release(Button.left)
# 滚动鼠标
mouse.scroll(0, 2) # 向上滚动2个单位
高级用法
1. 组合键操作
from pynput.keyboard import Controller, Key
keyboard = Controller()
with keyboard.pressed(Key.ctrl):
keyboard.press('a')
keyboard.release('a')
2. 非阻塞监听
from pynput import keyboard
def on_press(key):
print(f'{key} 被按下')
# 创建非阻塞监听器
listener = keyboard.Listener(on_press=on_press)
listener.start()
# 在这里可以执行其他代码
# ...
# 当需要停止监听时
listener.stop()
3. 热键监听
from pynput import keyboard
hotkey = keyboard.HotKey(
keyboard.HotKey.parse('<ctrl>+<alt>+h'),
lambda: print('热键被触发!'))
with keyboard.Listener(
on_press=lambda key: hotkey.press(key),
on_release=lambda key: hotkey.release(key)) as listener:
listener.join()
注意事项
- 权限问题:在某些系统上,可能需要管理员权限才能监听或控制输入设备。
- 事件处理:在事件回调函数中执行耗时操作可能会影响性能。
- 多线程:监听器默认运行在单独的线程中。
- 跨平台:PyNput 支持 Windows、macOS 和 Linux,但某些功能在不同平台上可能有差异。
实际应用示例
1. 简单的屏幕截图工具
from pynput import keyboard, mouse
import pyautogui
import time
def on_click(x, y, button, pressed):
if button == mouse.Button.left and pressed:
print(f'截图已保存为 screenshot.png')
pyautogui.screenshot('screenshot.png')
return False # 停止监听
# 按F8开始监听鼠标点击
def on_press(key):
if key == keyboard.Key.f8:
print('准备截图,请点击鼠标左键...')
with mouse.Listener(on_click=on_click) as listener:
listener.join()
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
2. 简单的自动点击器
from pynput.mouse import Controller, Button
from pynput.keyboard import Listener, Key
import time
mouse = Controller()
running = False
def on_press(key):
global running
if key == Key.f6:
running = not running
print(f'自动点击 {"开始" if running else "停止"}')
elif key == Key.esc:
return False # 停止监听
# 键盘监听
listener = Listener(on_press=on_press)
listener.start()
# 自动点击循环
try:
while True:
if running:
mouse.click(Button.left)
time.sleep(0.5) # 每0.5秒点击一次
else:
time.sleep(0.1)
except KeyboardInterrupt:
listener.stop()
希望这个详细教程能帮助你掌握 PyNput 的使用!根据你的具体需求,可以组合使用这些功能来实现各种自动化任务。