Событие Pyhook. Введено? - PullRequest
1 голос
/ 14 мая 2019

На самом деле больше вопроса здесь. Основываясь на учебнике pyHook , переменная события .HookManager (). OnMouseEvent в функции имеет атрибут .Injected. Я не мог найти информацию об этом, кто-нибудь знает, что это такое? Я пытался сделать

event.Injected = '<char to inject>'

но это не сработало.

1 Ответ

2 голосов
/ 23 мая 2019

Отказ от ответственности: я не эксперт в этом, Я просто делюсь своими наблюдениями о учебнике и документации , в надежде, что это будет полезно.

Атрибуты на event не для вас, чтобы установить вручную, но чтобы ваши обработчики событий могли читать и действовать.

Как видно из документации KeyboardEvent и MouseEvent , Цель переменных экземпляра Injected - проверить, было ли событие сгенерировано программно или нет. Я думаю, это означает, что события, которые ваши обработчики получают от мыши и клавиатуры, всегда будут иметь эту переменную False. И есть способ генерировать события программно, Я представляю с целью тестирования ваших обработчиков. И этот метод выглядит так: HookManager.KeyboardSwitch и HookManager.MouseSwitch .

Попробуйте это например. Создайте простую программу, чтобы увидеть детали некоторых реальных событий клавиатуры:

import pythoncom, pyHook

def OnKeyboardEvent(event):
    print 'MessageName:',event.MessageName
    print 'Message:',event.Message
    print 'Time:',event.Time
    print 'Window:',event.Window
    print 'WindowName:',event.WindowName
    print 'Ascii:', event.Ascii, chr(event.Ascii)
    print 'Key:', event.Key
    print 'KeyID:', event.KeyID
    print 'ScanCode:', event.ScanCode
    print 'Extended:', event.Extended
    print 'Injected:', event.Injected
    print 'Alt', event.Alt
    print 'Transition', event.Transition
    print '---'

    # return True to pass the event to other handlers
    return True

# create a hook manager
hm = pyHook.HookManager()

# watch for key press events
hm.KeyDown = OnKeyboardEvent

# set the hook
hm.HookKeyboard()

# wait forever
pythoncom.PumpMessages()

Нажмите пару клавиш и посмотрите на результаты. Нажмите Control-C, чтобы завершить программу.

Затем, чтобы сгенерировать некоторые события программно и посмотреть, как они выглядят, попробуйте что-то вроде этого:

import pythoncom, pyHook

def OnKeyboardEvent(event):
    # ... same code as in previous sample ...

# create a hook manager
hm = pyHook.HookManager()

# watch for key press events
hm.KeyDown = OnKeyboardEvent

# set the hook
hm.HookKeyboard()

# send keyboard event programmatically
msg = ...       # a value like in the "Message: ..." output in the previous run
vk_code = ...   # a value like in the "KeyID: ..." output in the previous run
scan_code = ... # a value like in the "ScanCode: ..." output in the previous run
ascii = ...     # a value like in the "Ascii: ..." output in the previous run
flags = 0x10    # see http://pyhook.sourceforge.net/doc_1.5.0/pyhook.HookManager-pysrc.html#KeyboardEvent.IsInjected
time = ...      # a value like in the "Time: ..." output in the previous run
hwnd = ...      # a value like in the "Window: ..." output in the previous run
win_name = ...  # a value like in the "WindowName: ..." output in the previous run
hm.KeyboardSwitch(msg, vk_code, scan_code, ascii, flags, time, hwnd, win_name)

После того, как вы установите соответствующие значения, и запустить эту программу, вы должны увидеть «Injected: True» в выводе.

Я думаю, что это основная идея, и аналогично для событий мыши. К сожалению, я не могу это проверить, потому что pyHook - это библиотека для ОС Windows, которой у меня нет.

...