尝试捕捉鼠标事件,但是在我的早期测试中,程序在大约30秒后停止响应[编辑:参见帖子底部],并给出此错误



这是代码。它应该只打印所有事件信息,直到崩溃为止。

import pythoncom
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

hm = pyHook.HookManager()
hm.MouseAll = OnMouseEvent
hm.HookMouse()
pythoncom.PumpMessages()

任何帮助,将不胜感激。

更新!
经过进一步测试后,崩溃似乎仅在将鼠标悬停在某些窗口(例如Skype联系人列表)上时才会发生。如果将鼠标悬停在Google Chrome浏览器窗口的标题上,也会收到相同的错误消息(但不会崩溃)。

最佳答案

当pyHook尝试将窗口名称解释为ascii时,我使用KeyboardSwitch而不是MouseSwitch将其跟踪到UnicodeDecodeError。在其窗口名称中包含Unicode字符的Skype上,此操作将失败。我已经发布了如何修复它here。但是我不得不重建pyHook。

关于python - 如何避免TypeError : MouseSwitch() missing 8 required positional arguments: 'msg' , 'x', 'y', 'data', 'time', 'hwnd'和 'window_name',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27363268/

10-13 01:49