Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как в python прехватывать клавиши

Vasya Zhavoronkov Ученик (92), на голосовании 2 недели назад
Делаю num-pad буфер с библиотекой keyboard (не из pynput). Мне нужно прехватывать и обрабатывать определенные нажатые клавиши но система не должна видеть их нажатие.
Дополнен 1 месяц назад
Мне нужно заблокировать num-pad но при его блокировке keyboard.on_press() не видит нажатие, видит только is_pressed(), но там нужно указывать конкретную клавишу. А мне нужно узнать код клавиши например key.scan_code или event.scan_code (чтобы различать num-pad), но у is_pressed у меня не получается получить key или event.
Голосование за лучший ответ
Валентин Артамонов Профи (594) 1 месяц назад
ООооо, обожаю данные темки, давай разбираться

1) Используем либку - pip install keyboard
2) Вот пример кода:
import keyboard

# Словарь для хранения состояния num-pad клавиш
num_pad_state = {
'num_lock': False,
'num_0': False,
'num_1': False,
'num_2': False,
'num_3': False,
'num_4': False,
'num_5': False,
'num_6': False,
'num_7': False,
'num_8': False,
'num_9': False,
'num_decimal': False,
'num_enter': False,
'num_add': False,
'num_subtract': False,
'num_multiply': False,
'num_divide': False
}

# Функция для обработки нажатий num-pad клавиш
def on_num_pad_press(event):
key = event.name
if key in num_pad_state:
num_pad_state[key] = True
print(f"Нажата клавиша num-pad: {key}")
# Здесь можно добавить обработку нажатия клавиши

# Функция для обработки отпускания num-pad клавиш
def on_num_pad_release(event):
key = event.name
if key in num_pad_state:
num_pad_state[key] = False
print(f"Отпущена клавиша num-pad: {key}")

# Установка обработчиков событий нажатия и отпускания клавиш
keyboard.on_press(on_num_pad_press)
keyboard.on_release(on_num_pad_release)

# Блокировка num-pad клавиш
for key in num_pad_state:
keyboard.block_key(key)

# Основной цикл программы
try:
print("Нажмите Ctrl+C для выхода.")
keyboard.wait('ctrl+c')
except KeyboardInterrupt:
print("Программа завершена.")

Немного обьясню работу:
Словарь num_pad_state: Хранит состояние каждой клавиши num-pad.

Функция on_num_pad_press: Обрабатывает нажатие клавиши num-pad.

Функция on_num_pad_release: Обрабатывает отпускание клавиши num-pad.

Блокировка клавиш: Используется keyboard.block_key() для блокировки каждой клавиши num-pad, чтобы система не видела их нажатия.

Основной цикл: Программа работает до тех пор, пока не будет нажата комбинация клавиш Ctrl+C.

P.s Этот код работает в среде, где у вас есть права администратора, так как перехват и блокировка клавиш требуют повышенных привилегий. по этому запуская от прав администратора прогу
Vasya ZhavoronkovУченик (92) 1 месяц назад
К сожалению у меня не получается запустить код без особых изменений. И on_press() не может обрабатывать заблок клавиши. Зато это может делать is_pressed.
Похожие вопросы