Проверить нажатие клавиши

Рейтинг: 0Ответов: 1Опубликовано: 16.03.2023

Я столкнулся с проблемой при написании скрипта. Я играю в игру, и там проблема в том, что я должен всегда держать клавишу S, и через некоторое время нажимать Shift + Space не отпуская S. К этим действиям добавляется еще и кликание по мышке. И я не всегда нажимая Space до конца нажимаю Shift. Так вот. Я решил написать скрипт, который будет при нажатии клавиши Space сам нажимать Shift, на случай если я не дожму. Сделать я хочу это при помощи модуля клавиатуры keyboard в Python. Но вот если я впишу keyboard.wait("space"), то в моей ситуации это не поможет. Как я уже писал выше у меня всегда зажата клавиша S, а значит данный способ не сработает. Если вписать keyboard.wait("space + s"), то это сработает только в первый раз, а дальше не будет работать. Такой вариант я тоже пробовал. Я решил попробовать так:

import keyboard
from time import sleep
def is_pressed(e):
    if e.event_type == "down":
        if e.name == "space":
            keyboard.press("shift")
            sleep(0.25)
            keyboard.release("shift")
            
keyboard.hook(is_pressed)

Но проблема тут в другом. Это тоже не работает. Если я в свое условие вставлю принт, то при нажатии пробела и при зажатой клавише S print сработает, но вот сам Shift не нажмется. Пока что я остановился на этом варианте, но он не нажимает клавишу. Помогите пожалуйста решить эту проблему.

Ответы

▲ 0

Функция sleep()блокирует выполнение программы из-за этого ошибка, попробуйте так

import asyncio
import keyboard

async def press_shift():
    while True:
        if keyboard.is_pressed('space') and keyboard.is_pressed('s'):
            keyboard.press('shift')
            await asyncio.sleep(0.25)
            keyboard.release('shift')
        await asyncio.sleep(0.01)

async def main():
    await asyncio.gather(press_shift())

loop = asyncio.get_event_loop()
loop.run_until_complete(main())