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

如何通过快捷键停止Python keyboard库开发的键盘连发工具而无需关闭程序

实现方案

现有代码的核心问题是连发逻辑进入阻塞式死循环后,没有额外的事件监听机制响应终止快捷键,同时长时长的time.sleep()会阻塞快捷键事件的响应。以下是可直接运行的修改方案:

修改后完整代码

import keyboard
import time

# 全局状态标志:控制连发是否运行
is_running = False
# 可自定义快捷键,这里设F9启动,F10终止
START_HOTKEY = "f9"
STOP_HOTKEY = "f10"

def start_spam():
    global is_running
    if not is_running:
        is_running = True
        print("连发已启动")

def stop_spam():
    global is_running
    if is_running:
        is_running = False
        print("连发已停止")

# 注册热键
keyboard.add_hotkey(START_HOTKEY, start_spam)
keyboard.add_hotkey(STOP_HOTKEY, stop_spam)
# 可选:注册esc为退出程序快捷键
keyboard.add_hotkey("esc", lambda: keyboard.unhook_all() or exit())

print(f"按{START_HOTKEY}启动连发,按{STOP_HOTKEY}停止连发,按esc退出程序")

# 主循环
while True:
    # 只有状态为运行时才执行连发逻辑
    if is_running:
        for i in range(9):
            # 每次循环都判断状态,避免中途触发停止没响应
            if not is_running:
                break
            keyboard.send("ctrl+v,enter")
            # 把0.4秒的sleep拆成4次0.1秒的sleep,每段都检查状态,响应更及时
            for _ in range(4):
                if not is_running:
                    break
                time.sleep(0.1)
    # 空闲状态降低CPU占用
    time.sleep(0.05)

核心逻辑说明

  • 用全局布尔变量is_running作为连发运行的开关,热键触发时仅修改这个变量的状态,不需要中断程序进程
  • 热键监听是keyboard库的独立事件线程,不会被主循环的逻辑阻塞,任何时候按下终止快捷键都会立刻修改状态
  • 把长时长的time.sleep()拆分为多段短时长休眠,每段休眠前都检查运行状态,保证终止请求的响应延迟不超过0.1秒
  • 不需要关闭程序即可反复启停连发,按esc才会完全退出程序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 00:36:02