5

マウスイベントにフックしようとしていますが、私の初期のテストでは、プログラムは約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 ウィンドウのヘッダーにマウスを合わせると、同じエラー メッセージが表示されます (ただし、クラッシュはありません)。

4

2 に答える 2

1

私はKeyboardSwitch代わりにこれを持っていて、pyHookがウィンドウ名をASCIIとして解釈しようとMouseSwitchしたときにそれを追跡しました。UnicodeDecodeErrorウィンドウ名に Unicode 文字が含まれる Skype では失敗します。ここに修正方法を投稿しました。しかし、pyHook を再構築する必要がありました。

于 2015-10-27T09:01:23.510 に答える
1

pyHook は、より Python 2 向けです。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()
于 2020-10-07T21:15:07.083 に答える