0

これは Python キーロガーとウィンドウ タイトル グラバーのコードですが、同時にそれらを取得することはできません。

import pythoncom, pyHook ,time

def OnKeyboardEvent(event):
            keylog= chr(event.Ascii)

            print keylog
            key =  event.WindowName
            print key
            time.sleep(0.1)
            if(key==event.WindowName):
                pass
            else:
                key = event.WindowName
                print key

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()   

出力は次のようになります

a スタートメニュー b スタートメニュー c スタートメニュー d cmd.exe

そして、私はそれが必要です

スタート メニュー abc

cmd.exe d

4

1 に答える 1

1

あなたのコードは本当に意味がありません。それが何をするかを見てみましょう:

        keylog= chr(event.Ascii)

        print keylog

これにより、押されたキーが出力されます。

        key =  event.WindowName
        print key

これにより、ウィンドウ名が出力されます。keyキーではないときに呼び出される変数に貼り付けている理由はわかりませんが、それによって機能が変わるわけではありません。

        time.sleep(0.1)

これはおそらく一時停止するため、ユーザーの入力が速すぎる場合にキーを確実に逃すことができますか?

        if(key==event.WindowName):
            pass

key = event.WindowName以前に設定したため、これは常に真であり、eventオブジェクトはその場で変更されません。

        else:
            key = event.WindowName
            print key

上で説明したように、これは決して起こりません。しかし、そうであれば、keyすでに持っている値 (ウィンドウ名) に設定され、再度表示されます。

私の推測では、あなたがここでやろうとしているのは、前回とは異なる場合にのみウィンドウ名を出力すること、またはそのようなことですか? これを行う簡単な方法は、グローバル変数を使用することです。

lastWindow = None

def OnKeyboardEvent(event):
    global lastWindow

    window = event.WindowName
    key = chr(event.Ascii)

    if window != lastWindow:
        print window
        lastWindow = window

    print key

したがって、テストケースでは、これの代わりに:

a Start menu b Start menu c Start menu d cmd.exe

これを取得する必要があります:

Start menu a b c cmd.exe d

(ただし、実際には、スペース区切りではなく、別々の行にそれらを取得します。これは、コードがprint keylogand を実行するだけprint keyで、私も同じことをしたからです。それらをすべて 1 行に入れたい場合は、それぞれの末尾にコンマを入れます。print声明。)

于 2013-03-05T20:21:05.803 に答える