0

我正在创建一个 python 脚本来记录我在系统上按下的键(键盘记录器),并用我的打字习惯的信息打电话回家。我是 python 新手,我正在使用这个应用程序来了解它。我正在使用 python-3.x 和 windows 8

完整的源代码可以在这里找到 https://github.com/funvill/QSMonitor/blob/master/monitor.py

使用这个片段,我可以记录整个系统中的所有按键。问题是当我 [ctrl]+[c] 在另一个窗口中复制某些内容时,python 代码会崩溃。

重现步骤

  1. 运行 monitor.py 脚本
  2. 在另一个窗口 (notepad.exe) 中键入几个字母 (abcd)。
  3. 突出显示记事本中的字母并按住 [ctrl] 并按 [c]

有经验的:

将弹出一条 Windows 错误消息并告诉我 python.exe 已停止运行,需要重新启动。命令窗口中没有 python 错误消息。

def OnKeyboardEvent(event):
    global keyDatabase
    global keyLoggerCount 
    keyLoggerCount += 1 

    # http://code.activestate.com/recipes/553270-using-pyhook-to-block-windows-keys/ 
    print ('MessageName:',event.MessageName )
    print ('Message:',event.Message)
    print ('Time:',event.Time)
    print ('Window:',event.Window)
    print ('WindowName:',event.WindowName)
    print ('Ascii:', event.Ascii, chr(event.Ascii) )
    print ('Key:', event.Key)
    print ('KeyID:', event.KeyID)
    print ('ScanCode:', event.ScanCode)
    print ('Extended:', event.Extended)
    print ('Injected:', event.Injected)
    print ('Alt', event.Alt)
    print ('Transition', event.Transition)
    print ('---')    

    # check to see if this key has ever been pressed before 
    # if it has not then add it and set its start value to zero. 
    if event.Key not in keyDatabase:
        keyDatabase[ event.Key ] = 0 ; 

    # Incurment the key value 
    keyDatabase[ event.Key ] += 1 ; 
    return True

# When the user presses a key down anywhere on their system 
# the hook manager will call OnKeyboardEvent function.     
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()

while True : 
    pythoncom.PumpWaitingMessages()

我的问题是:

  • 什么可能导致副本和过去崩溃?
4

2 回答 2

1

如果要捕获KeyboardInterrupt异常,可以使用嵌套循环。这样,当发生 KeyboardInterrupt 时,程序只退出内部循环。

while True:
    try:
        while True:
            pythoncom.PumpWaitingMessages()
    except KeyboardInterrupt:
        pass
于 2013-11-12T13:45:12.080 回答
1

在 python 中,Ctrl+C 会抛出 KeyboardInterrupt 异常。

http://docs.python.org/2/library/exceptions.html#exceptions.KeyboardInterrupt

于 2013-01-22T01:05:18.677 回答