2016-04-11 9 views
0

Ich bin neu in Python und beschlossen, einen Keylogger (für Lernzwecke) zu bauen, ist die Idee dieses Programms, den Ascii Wert von Tastenanschlägen zu nehmen und die entsprechenden auszudrucken Charakter, ich bekomme nicht die richtigen Ascii-Werte von meinen Tastenanschlägen. Zum Beispiel sollte nach der Tabelle Ascii das Zeichen 'a' einen Ascii-Wert von 97 haben, aber mein Programm spuckt es mit einem Wert von 1 aus (was zufällig seine Position im Alphabet ist).Python - Ascii Werte für Tastatur Zeichen sind nicht korrekt

Mein Programm:

import pythoncom 
import pyHook 


def key_event(event): 
    if int(event.Ascii) != 0: 
     keylog = chr(event.Ascii) 
     if int(event.Ascii) == 13: 
      keylog = '\n' 
     print(keylog) 
     return True 

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

Meine IDE ist PyCharm und es gibt mir gelegentlich diesen Fehler in Bezug auf hm.HookKeyboard(): http://imgur.com/ZgomMSf

Und diese Benachrichtigung über pythoncom.PumpMessages(): http://imgur.com/h7lECAf

Ich weiß nicht, ob diese Fehler mit meinem Problem zu tun haben, also dachte ich einfach, ich würde sie werfen.

+0

Für den Debug-Zweck - vor der Zeile keylog = ... fügen Sie hinzu: "print event.Ascii", um zu sehen, welchen Wert Sie von dem Ereignis erhalten. – Yaron

+0

Ich bekomme die gleiche Ausgabe, dies ändert nicht die Ergebnisse – kyldu

+0

welche Werte erhalten Sie von "print event.Ascii"? – Yaron

Antwort

0

In einer Conda Python 2.7-Umgebung, stieß ich auf ein ähnliches Problem aufgrund der Tatsache, dass Conda Ihnen Versionen von Python umschalten kann


Das Problem verwendet wird, ist, dass die C-Sprache-Cache im Mittelpunkt der Pythons Interpreter und Compiler werden zwischen verschiedenen Versionen von Python geteilt. Die pyHook-Bibliothek muss diesen Cache verwenden, wenn Sie die Tasten aus der Registrierung drücken.


von einer Befehlszeilenoption auf eine andere Version von Python nicht das gleiche, in dem Sie den Code auszuführen beabsichtigen Wenn ausgeführt wird.

öffnen Sie das Python-Interpreter und in dem Interpreter Eingang eine Variable mit einem Wert (Beispiel: "foo='bar'") (ein Beispiel wäre Python werden eingeben), geben Sie dann exit()

nun in der Befehlszeile wechseln auf die andere Version von python, auf dem Sie den Code ausführen möchten (für mich in Conda ist es „activate py27_32“ ich von meinem Standard-python 3.5 x64 64Bit auf 2,7 x86 32Bit am Schalt)

Schließlich, wenn Sie Ihre Lauf Code (Beispiel "python myCode.py "), event.Ascii die Propper Schlüsselwerte zurückkehren wird, wie durch Ascii definiert

Dieser Vorgang für alle Wiederläufe des Codes danach

Es könnte sich lohnen, der Suche nach einem wiederholt werden müssen Weg von innen python python-Cache löschen



A schnell Hotfix nur Zeichen definiert in Ascii zwischen 64 und 9 zu erhalten 3 ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ist wie folgt

keyPressed = chr (int (Ereignis.Ascii) + 64)