尝试挂钩鼠标事件,但在我的早期测试中,程序在大约30秒后停止响应[编辑:查看帖子的底部]并给出此错误
TypeError:MouseSwitch()缺少8个必需的位置参数:' msg',' x',' y',' data', ' time',' hwnd'和' window_name'
这是代码。它应该只打印所有事件信息,直到它崩溃为止。
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窗口的标题上,我也会收到相同的错误消息(但没有崩溃)。
答案 0 :(得分:0)
我使用KeyboardSwitch
代替MouseSwitch
,并在pyHook尝试将窗口名称解释为ascii时将其跟踪到UnicodeDecodeError
。它在Skype上失败,其窗口名称中包含unicode字符。我已经发布了如何修复它here。但是我不得不重建pyHook。
答案 1 :(得分:0)
pyHook更面向python2。github中有一些存储库,可以在python 3中使用它作为修改和扩展,现在,更好地在python 3中使用pynput如下:
# -*- coding: utf-8 -*-
from pynput.keyboard import Listener
def key_recorder(key):
f=open('keylogger.txt','a')
keyo=str(key)
if keyo=="Key.enter":
f.write('\n')
elif keyo=="Key.space":
f.write(" ")
elif keyo =="Key.backspace":
#f.write(keyo.replace(keyo,""))
size=f.tell() # the size...
f.truncate(size-1)
elif keyo=="Key.alt_l" or keyo=="Key.tab":
f.write('')
elif keyo=="Key.ctrl_l":
f.write('')
elif keyo=="Key.alt_gr":
f.write('')
else:
print(keyo)
f.write(keyo.replace("'",""))
with Listener(on_press=key_recorder) as l :
l.join()