如何使用pynput实现按住鼠标按键并持续指定时长的功能?
鼠标左键长按指定时长的实现方案
原代码失效的核心原因是:多数桌面程序、游戏对长按事件的判定需要持续的输入事件信号,直接使用整块time.sleep()会阻塞当前线程的输入事件分发,导致操作系统仅识别到一次按下+抬起的快速点击操作,无法判定为长按。
以下是两种可直接使用的稳定实现:
方案1:pynput库实现(低延迟、跨平台兼容性好)
先安装依赖:pip install pynput
代码实现:
from pynput.mouse import Button, Controller import time def hold_left_click(duration: float): mouse = Controller() mouse.press(Button.left) start_time = time.time() # 拆分等待为小间隔循环,避免阻塞输入事件队列 while time.time() - start_time < duration: time.sleep(0.01) mouse.release(Button.left) # 调用示例:按住左键2.5秒 hold_left_click(2.5)
如果是针对游戏等对输入检测要求高的场景,可以在循环中添加无感知的鼠标事件推送,避免被识别为单次点击:
while time.time() - start_time < duration: # 0偏移移动会推送输入事件,但不会实际移动鼠标 mouse.move(0, 0) time.sleep(0.005)
方案2:pyautogui库实现(写法更简洁)
先安装依赖:pip install pyautogui
代码实现:
import pyautogui import time def hold_left_click(duration: float): pyautogui.mouseDown() time.sleep(duration) pyautogui.mouseUp() # 调用示例:按住左键3秒 hold_left_click(3)
注意事项
- 如果目标程序以管理员权限运行,Python脚本也需要以管理员权限启动才能正常注入输入事件
- 带反作弊机制的程序会拦截第三方模拟输入事件,此类场景上述方案不适用
内容的提问来源于stack exchange,提问作者PoJIY_cJIaDeHbKuU
相关产品推荐
相关产品推荐

