Ошибка pyHook или pythoncom?

У меня винда 7, 64 бит. Я запускаю файл example.py (код размещен ниже), который поставляется с пакетом pyHook. Всякий раз, когда моим активным окном является Skype, либо мой компьютер дает сбой, либо я получаю «TypeError: KeyboardSwitch () отсутствует 8 обязательных позиционных аргументов: ..». Я предполагаю, что код в примере в порядке, и если я не использую Skype, он работает нормально. Какие-нибудь мысли?

from __future__ import print_function

import pyHook

def OnMouseEvent(event):
    print('MessageName:',event.MessageName)
    print('Message:',event.Message)
    print('Time:',event.Time)
    print('Window:',event.Window)
    print('WindowName:',event.WindowName)
    print('Position:',event.Position)
    print('Wheel:',event.Wheel)
    print('Injected:',event.Injected)
    print('---')

    # return True to pass the event to other handlers
    # return False to stop the event from propagating
    return True

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 False to stop the event from propagating
    return True

# create the hook mananger
hm = pyHook.HookManager()
# register two callbacks
hm.MouseAllButtonsDown = OnMouseEvent
hm.KeyDown = OnKeyboardEvent

# hook into the mouse and keyboard events
hm.HookMouse()
hm.HookKeyboard()

if __name__ == '__main__':
    import pythoncom
    pythoncom.PumpMessages()

person Nathan Schmidt    schedule 03.04.2015    source источник


Ответы (1)


У меня было это, и я проследил его до UnicodeDecodeError, когда pyHook пытается интерпретировать имя окна как ascii. Он не работает в Skype, в имени окна которого есть символы Юникода. Я опубликовал, как я это исправил здесь. Но мне пришлось пересобрать pyHook.

PS: своего рода дублирующий ответ, но я хотел связать этот вопрос с тем, что я нашел.

person strubbly    schedule 27.10.2015