pyHook: возврат нажатия клавиши срабатывает дважды

#python #winapi

#python #winapi

Вопрос:

В следующем коде, когда я нажимаю return , on_key_down вызывается дважды. Он вызывается только один раз для любого другого ключа. Есть идеи, что здесь происходит?

 import pyHook, pythoncom, win32api

def on_key_down(e):
  if e.MessageName == 'key down':
    print 'e.Key: ', e.Key
    print 'e.Ascii: ', e.Ascii
  return True
hm = pyHook.HookManager()
hm.KeyDown = on_key_down
hm.HookKeyboard()    
pythoncom.PumpMessages()
  

Ответ №1:

Поскольку новой строкой окна является ‘ r n’, вы, вероятно, получаете оба этих символа при нажатии return.

Комментарии:

1. Нет, я не думаю, что это все. Я отредактировал свой код, чтобы напечатать значение ascii, и оба раза оно равно 13, что является кодом для r .

2. Интересно. Рассматривали ли вы возможность написания C и взаимодействия напрямую с winapi, чтобы посмотреть, как это работает?

3. Эх … прошло несколько лет с тех пор, как я написал какой-либо C. Было бы непросто настроить. Я думаю, что пока я просто обойду проблему.

Ответ №2:

Если вы можете, попробуйте использовать KeyUp вместо KeyDown. Я получаю только одно событие с KeyUp.