нажатие клавиши pynput - PullRequest
0 голосов
/ 20 мая 2019

(примечание: начинающий программист, а также начинающий переполнения стека, извините, если я что-то сделал не так)

Я пытаюсь написать программу на python (python 3.7.3, если это полезно), в которой при удерживании клавиши обратной косой черты ("\") она спамит левой кнопкой мыши (для онлайн-игр. Я буду связывать кнопка мыши до «\», чтобы не приходилось обнаруживать щелчок левой кнопкой мыши и сталкиваться с проблемой обнаружения щелчков мыши, что делает программа). Мой код в настоящее время работает, но когда "\" выпущен, требуется несколько секунд, чтобы прекратить щелкать в зависимости от того, как долго он удерживается.

вот мой код:

from pynput.keyboard import Key, Listener
import pyautogui


def key_down(key):
    if str(key) == "'\\\\'":
        pyautogui.click()

def key_up(key):
    if str(key) == "'\\\\'":
        print('key has been lifted')

with Listener(on_press=key_down,on_release=key_up) as l:
    l.join()

Я что-то не так делаю? Есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 20 мая 2019

для тех, кто столкнется с такой же проблемой в будущем: не знаю, как решить исходную проблему с отставанием, но обошлось с помощью многопоточности.вот мой код сейчас:

примечание: «\\\\» проверяет, нажата ли клавиша обратной косой черты, но модуль pynput хранит ее как «\\», поэтомупоскольку обратная косая черта является escape-символом, вам нужно набрать его "'\\\\'", чтобы он действительно был "'\\'"

from pynput.keyboard import Key, Listener
import pyautogui
from threading import Thread

shouldClick = False

def click():
    while True:
        while shouldClick:
            pyautogui.click()


def key_down(key):
    global shouldClick
    if str(key) == "'\\\\'":
        shouldClick = True


def key_up(key):
    global shouldClick
    if str(key) == "'\\\\'":
        shouldClick = False
        print('key has been lifted')


def listen():
    with Listener(on_press=key_down,on_release=key_up) as l:
        l.join()


listenThread = Thread(target=listen)
clickThread = Thread(target=click)

listenThread.start()
clickThread.start()

, если вы хотите раздвинуть пределынажав до крайности, вы можете добавить следующий код:

thrCount = 40
print(thrCount, 'threads')
for _ in range(thrCount):
    clickThreadList.append(Thread(target=click))
for thr in clickThreadList:
    thr.start()
...