Как смоделировать щелчок мыши, удерживая клавишу SHIFT в Windows? - PullRequest
6 голосов
/ 06 июня 2019

Здравствуйте. Я пытаюсь смоделировать щелчок мыши, удерживая клавишу SHIFT .Я пытался сделать это с помощью модуля pynput.

Это мой код:

from pynput.keyboard import Key
from pynput.keyboard import Controller as Cont
from pynput.mouse import Button, Controller
import time

mouse = Controller()
keyboard = Cont()

with keyboard.pressed(Key.shift):
    mouse.position = (1892, 838)
    mouse.click(Button.left)

Я знаю, что код для удержания клавиши Shift работает (Если япопробуйте нажать кнопку «а» в коде, который я вижу «А»).Также я знаю, что щелчок мышью работает.Однако вместе это не работает.


Также я попробовал другой код из сообщения StackOverflow: Pyautogui - Нужно удерживать Shift и нажать

Я попробовалследующий код из него:

import pyautogui

pyautogui.keyDown('shift')
pyautogui.click()
pyautogui.keyUp('shift')

Это работало в течение минуты, а затем перестало работать!Очень странно.Это терпит неудачу как 9 из 10 раз.

Ответы [ 3 ]

0 голосов
/ 14 июня 2019

Сценарий работает так, как задумано, но, похоже, цель , к которой вы пытаетесь применить Shift + Левый щелчок , не принимает такие входные данные, пока его окно в Windows GUI не в фокусе. Вот почему это работает, когда вы включаете Левый щелчок перед Shift + Левый щелчок , потому что при первом щелчке открывается целевое окно (независимо от программы / приложение это) в фокусе, тогда уже работающий, но игнорируемый Shift + Левый щелчок также принимается целью target

0 голосов
/ 23 июня 2019

Вы должны добавить таймер, скорее всего, он будет работать.

import pyautogui
import time

#cordinates
cordinates = 100,100
pyautogui.keyDown('shift')
time.sleep(0.15)
pyautogui.click(cordinates)
time.sleep(0.15)
pyautogui.keyUp('shift')
0 голосов
/ 06 июня 2019

Обходной путь, который я предлагаю, - создать прослушиватель событий, подобный этому:


def on_press(key):
    print('{0} pressed'.format(
        key))

def on_release(key):
    print('{0} release'.format(
        key))
    if key == Key.esc:
        # Stop listener
        return False

enter code hereCollect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()```
...