Python win32api和pyautogui单击会降低常规鼠标单击的速度

2024-09-27 09:31:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个简单的python程序来模拟鼠标双击,但我遇到了一个问题。 以下是我目前的代码:

from pynput.mouse import Listener
import win32api
import win32con
import random
from time import sleep

accepting_input = True

def click(x, y, delay):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    sleep(delay/1000)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def on_click(x, y, button, pressed):
    global accepting_input
    if accepting_input == True:
        if pressed:
            accepting_input = False
            sleep(random.randint(20, 31)/1000)
            click(x, y, 10)
            print('Double clicked')
            accepting_input = True

with Listener(on_click=on_click) as listener:
    accepting_input = True
    listener.join()

在运行过程中,每当我单击鼠标时,单击都会延迟(我说的是来自物理鼠标的第一次单击,而不是模拟的第二次单击)。 如果我删除代码的click(x, y, 10)行,我就不会有这个问题。 这个程序是如何延迟我的硬件点击的

我使用这个网站来测试双击:https://codepen.io/blink172/pen/vERyxK

一个可能的线索是,使用该站点时,两次单击之间的延迟小于20到31毫秒(正如我的代码行sleep(random.randint(20, 31)/1000)所示)

编辑:当我使用pyautogui而不是win32api时,也会发生同样的情况。以下是我的pyautogui代码:

from pynput.mouse import Listener
from random import randint
from pyautogui import click
from time import sleep

accepting_input = True

def on_click(x, y, button, pressed):
    global accepting_input
    if accepting_input == True:
        if pressed:
            accepting_input = False
            sleep(randint(20, 31)/1000)
            click(button='left')
            accepting_input = True
            

with Listener(on_click=on_click) as listener:
    accepting_input = True
    listener.join()

提前谢谢


Tags: 代码fromimporttrueinputifonsleep

热门问题