Я хочу собирать данные во время игры, чтобы я мог изучить алгоритм, чтобы играть в нее позже. Для этого мне нужен регистратор клавиш и мыши, этот регистратор должен:
- регистрировать щелчки мыши и прокрутки
- регистрировать любые нажатия клавиш.
Проблема, с которой я сталкиваюсь, заключается в том, что один щелчок/прокрутка мыши и нажатие клавиши регистрируются дважды. Я думал, что с помощью Javascript вы можете остановить это, используя preventDefault()
, но я не знаю решения этой проблемы на Python.
Следующие выходные строки представляют собой один клик:
время/кнопка/x/y/нажато
(17:52:08.509538): click:Button.left:587:1266:True:
(17:52:08.510471): click:Button.left :587:1266:Верно:
Я бы предпочел не проверять разницу во времени между текущим и последним триггером, за исключением случаев, когда у меня нет другого варианта, но я не могу представить, что это так.
Я определил своих слушателей следующим образом:
with keyboard.Listener(on_press=self.on_press) as k_listener, mouse.Listener(on_click=self.on_click, on_scroll=self.on_scroll) as m_listener:
k_listener.join()
m_listener.join()
Методы on_press, on_click и on_scroll выглядят следующим образом:
def on_press(self, key):
print(str(key))
self.log_input(str(key))
def on_click(self, x, y, button, pressed):
if pressed:
print('click:' + str(button) + ':' + str(x) + ':' + str(y) + ':' + str(pressed) + ':')
self.log_input('click:' + str(button) + ':' + str(x) + ':' + str(y) + ':' + str(pressed) + ':')
else:
pass
def on_scroll(self, x, y, dx, dy):
print('scroll:' + str(x) + ':' + str(y) + ':' + str(dx) + ':' + str(dy) + ':')
self.log_input('scroll:' + str(x) + ':' + str(y) + ':' + str(dx) + ':' + str(dy) + ':')
Я хотел бы, чтобы эти методы запускались только один раз, а не дважды.
on_click
как объединенную версиюon_click_down
+on_click_up
в той же позиции, похоже, что он вызывает двойной щелчок вместоon_drag
(x/y может быть одинаковым, но он может содержать двойное значение и не показывать десятичные знаки) - person Alex   schedule 28.01.2021