You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何基于pynput实现按键输入后的重复触发功能

按键捕获与回放工具实现方案

你的现有代码仅能捕获单个按键的释放事件,未存储历史操作序列,也无法直接用于回放。以下是满足需求的完整实现,支持捕获所有按键(包括特殊键)并在指定时机回放:

基于pynput的实现

完整代码

from pynput.keyboard import Listener, Controller, Key
import sys

# 存储完整按键事件序列:每个元素为(事件类型, 按键对象, 是否按下)
key_events = []
controller = Controller()

def on_press(key):
    global key_events
    # 记录按下事件
    key_events.append(('key', key, True))
    # 按下F9触发回放
    if key == Key.f9:
        replay_events()
    # 按下Esc退出并回放
    elif key == Key.esc:
        replay_events()
        sys.exit()

def on_release(key):
    global key_events
    # 记录释放事件
    key_events.append(('key', key, False))

def replay_events():
    """回放所有记录的按键操作"""
    print("\n正在回放按键序列...")
    for event in key_events:
        _, key, is_press = event
        if is_press:
            controller.press(key)
        else:
            controller.release(key)
    print("回放完成!")

# 启动监听
with Listener(on_press=on_press, on_release=on_release) as listener:
    print("开始捕获按键:按下F9立即回放,按下Esc退出并自动回放")
    listener.join()

关键说明

  • 完整事件记录:同时监听按键的按下和释放动作,确保回放时完全还原用户操作(比如按住空格的持续效果)
  • 特殊按键支持:直接使用pynput内置的Key类处理特殊按键(空格、方向键、Esc等),无需字符串转换
  • 触发时机:预设了两种触发场景,可根据需求修改(比如改为关闭程序时触发,或读取完文本后触发)

基于keyboard模块的替代实现

如果偏好keyboard模块,以下代码更简洁:

import keyboard
import sys

key_events = []

def record_event(event):
    global key_events
    # 记录事件类型(down/up)和按键名称
    key_events.append((event.event_type, event.name))

def replay_events():
    print("\n正在回放...")
    for event_type, key in key_events:
        if event_type == 'down':
            keyboard.press(key)
        else:
            keyboard.release(key)
    print("回放完成!")

# 绑定所有按键事件的记录函数
keyboard.hook(record_event)

# 设置触发快捷键
keyboard.add_hotkey('f9', replay_events)
keyboard.add_hotkey('esc', lambda: (replay_events(), sys.exit()))

print("开始捕获按键:按下F9回放,按下Esc退出并回放")
keyboard.wait()

注意事项

  • 运行此类工具通常需要管理员/root权限,否则可能无法捕获系统级按键事件
  • 回放时尽量避免手动操作键盘,防止模拟按键与真实操作冲突
  • 可根据需求自定义触发逻辑:比如添加一个"停止捕获"按键,仅回放指定时段的操作;或在程序收到退出信号时自动触发回放

内容的提问来源于stack exchange,提问作者Klesty Selimay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:25:50