Python实现按住鼠标左键自动重复点击功能遇阻求助
修复后的自动点击程序
原代码存在几个核心问题:Listener.join()会阻塞主线程导致后续代码无法执行、多进程间全局变量不共享无法传递状态、未处理鼠标左键释放事件、变量未初始化可能引发报错。以下是修正后的代码:
from pynput.mouse import Button, Controller, Listener import time import multiprocessing as mp import keyboard mouse = Controller() sleep_time = 0.01 def clicker(click_event): # 事件触发时持续执行点击 while click_event.is_set(): mouse.click(Button.left) time.sleep(sleep_time) def on_click(x, y, button, pressed): if button == Button.left: if pressed: # 按下左键时启动点击逻辑 click_event.set() else: # 释放左键时停止点击逻辑 click_event.clear() if __name__ == "__main__": # 创建进程事件,用于跨进程控制点击启停 click_event = mp.Event() # 启动点击子进程 p1 = mp.Process(target=clicker, args=(click_event,)) p1.start() # 启动鼠标监听器(非阻塞模式) listener = Listener(on_click=on_click) listener.start() # 主循环处理退出逻辑 while True: # 按Esc键退出程序(可自行替换为其他按键) if keyboard.is_pressed("esc"): click_event.clear() p1.terminate() listener.stop() break
关键改动说明:
- 用
multiprocessing.Event替代全局变量,实现主进程与子进程的可靠状态通信 - 鼠标监听器改为非阻塞启动,避免主线程被卡死
- 完善
on_click函数,同时处理左键按下和释放事件,实现点击的启停控制 - 退出时执行清理操作,确保程序优雅终止
内容的提问来源于stack exchange,提问作者OttoPlayZ
相关产品推荐
相关产品推荐

