@Dima_E

Как узнать нажата ли клавиша клавиатуры?

Мне нужно узнать в каком состоянии находится указанная клавиша.
Меня не интересуют библиотеки, типа python > keyboard или mouse так как они иначе работают.
Точно не знаю, но вроде они ставят краткосрочные хуки которые снимаются через несколько секунд.
И не могут определить нажата ли клавиша. Если вызов проверки идет после уже нажатия клавиши.
(это касается эмулированных нажатий, то что мне надо. Реальные устройство вроде как постоянно обновляют статус нажатия,)

Я знаю что система создает состояния клавиш для каждого HID устройства и вывода клавиатуры. То есть у неё есть списки того, что в данный момент нажато. Как я могу их получить или узнать о состоянии как либо ещё ?

Возможен другой вопрос как я могу узнать к какому списку относится мой вывод , когда я эмулирую клавиши со скан кодов или pyautogui.
  • Вопрос задан
  • 189 просмотров
Решения вопроса 2
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Мне нужно узнать в каком состоянии находится указанная клавиша.
import ctypes
from ctypes import wintypes
import time

user32 = ctypes.WinDLL('user32', use_last_error=True)

VK_SPACE = 0x20 #Пробел

def is_key_pressed(vk):
    return (user32.GetAsyncKeyState(vk) & 0x8000) != 0

while True:
    print("Пробел нажатый?:", is_key_pressed(VK_SPACE))
    time.sleep(1)

Virtual-Key Codes
ctypes - Офф. документация
ctypes - Доки на русском(возможно машинный перевод)
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Ну под виндой можно дёрнуть GetAsyncKeyState() (для одной клавиши) или GetKeyboardState() (для всех клавиш) через ctypes.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Bright144
import win32api
import time

while True:
    if win32api.GetAsyncKeyState(ord('A')):
        print('Нажато A')
    time.sleep(0.5)

можешь контролировать скорость реакции с помаши time.sleep.
Плюс win32api в том что ему не важен на ком языке ты вводишь или нажимаешь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы