2015-04-03 69 views
2

我有Windows 7,64位。我正在运行pyHook包附带的example.py文件(下面的代码)。每当我的活动窗口是Skype,无论是我的电脑崩溃,或我得到'TypeError:KeyboardSwitch()缺少8个必需的位置参数:..'。我假设示例中的代码没问题,如果我不使用Skype,它运行良好。有什么想法吗?pyHook或pythoncom错误?

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() 

回答

1

我有这个,它追踪到UnicodeDecodeError时pyHook试图解释窗口名称为ASCII。它在窗口名称中包含unicode字符的Skype上失败。我发布了我如何修复它here。但我不得不重建pyHook。

PS:一种重复的答案,但想把这个问题连接到我发现的东西。