В настоящее время я работаю над скриптом Python типа кейлоггера, и у меня возникают проблемы с сохранением того, какие клавиши в любой момент удерживаются нажатыми.
Я написал этот небольшой фрагмент кода, чтобы продемонстрировать свою проблему:
from pynput.keyboard import Key, Listener
import time
def on_press(key):
print(f'{key} pressed')
if not key in keys_down:
keys_down[key] = time.time()
print(keys_down)
def on_release(key):
print(f'{key} release')
del keys_down[key]
if key == Key.esc:
return False
keys_down = dict()
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
Я хочу сохранить, какие клавиши клавиатуры нажимаются в данный момент в словаре keys_down
.
Я также хочу знать, когда впервые была нажата определенная клавиша клавиатуры.
Поэтому пары ключ-значение моего словаря хранятся следующим образом:
keys_down = {
keyboard key 1: timestamp when first pressed
keyboard key 2: timestamp when first pressed
...
}
Когда клавиша клавиатуры отпущена, я удаляю пару ключ-значение с ключом, эквивалентным отпущенной клавише клавиатуры.
Надеюсь, это предложение имело смысл.
Проблема возникает при использовании быстрого доступа crtl
.
Иногда клавиша клавиатуры, выводимая при нажатии, отличается от той же клавиши клавиатуры, выводимой при отпускании. Из-за этого del
-функция выдает ошибку, поэтому она пытается удалить несуществующий пар ключ-значение.
Я очень надеюсь, что вы поможете мне обойти эту проблему. Хорошего дня :)
KeyError
из неудачной операцииdel
с помощью блокаtry/except
? - person larsks   schedule 14.01.2021