|
@@ -0,0 +1,98 @@
|
|
|
+unit logkeys;
|
|
|
+
|
|
|
+interface
|
|
|
+
|
|
|
+Procedure StartKeyLogging;
|
|
|
+Procedure StopKeyLogging;
|
|
|
+Function IsKeyLogging : Boolean;
|
|
|
+Procedure SetKeyLogFileName(FileName : String);
|
|
|
+
|
|
|
+
|
|
|
+implementation
|
|
|
+
|
|
|
+uses sysutils,keyboard;
|
|
|
+
|
|
|
+var
|
|
|
+ NewKeyBoardDriver,
|
|
|
+ OldKeyBoardDriver : TKeyboardDriver;
|
|
|
+ Active,Logging : Boolean;
|
|
|
+ LogFileName : String;
|
|
|
+ KeyLog : Text;
|
|
|
+
|
|
|
+Function TimeStamp : String;
|
|
|
+
|
|
|
+begin
|
|
|
+ TimeStamp:=FormatDateTime('hh:nn:ss',Time());
|
|
|
+end;
|
|
|
+
|
|
|
+Procedure StartKeyLogging;
|
|
|
+
|
|
|
+begin
|
|
|
+ Logging:=True;
|
|
|
+ Writeln(KeyLog,'Start logging keystrokes at: ',TimeStamp);
|
|
|
+end;
|
|
|
+
|
|
|
+Procedure StopKeyLogging;
|
|
|
+
|
|
|
+begin
|
|
|
+ Writeln(KeyLog,'Stop logging keystrokes at: ',TimeStamp);
|
|
|
+ Logging:=False;
|
|
|
+end;
|
|
|
+
|
|
|
+Function IsKeyLogging : Boolean;
|
|
|
+
|
|
|
+begin
|
|
|
+ IsKeyLogging:=Logging;
|
|
|
+end;
|
|
|
+
|
|
|
+Function LogGetKeyEvent : TKeyEvent;
|
|
|
+
|
|
|
+Var
|
|
|
+ K : TKeyEvent;
|
|
|
+
|
|
|
+begin
|
|
|
+ K:=OldkeyboardDriver.GetKeyEvent();
|
|
|
+ If Logging then
|
|
|
+ begin
|
|
|
+ Write(KeyLog,TimeStamp);
|
|
|
+ Writeln(KeyLog,': Key event: ',KeyEventToString(TranslateKeyEvent(K)));
|
|
|
+ end;
|
|
|
+ LogGetKeyEvent:=K;
|
|
|
+end;
|
|
|
+
|
|
|
+Procedure LogInitKeyBoard;
|
|
|
+
|
|
|
+begin
|
|
|
+ OldKeyBoardDriver.InitDriver();
|
|
|
+ Assign(KeyLog,logFileName);
|
|
|
+ Rewrite(KeyLog);
|
|
|
+ Active:=True;
|
|
|
+ StartKeyLogging;
|
|
|
+end;
|
|
|
+
|
|
|
+Procedure LogDoneKeyBoard;
|
|
|
+
|
|
|
+begin
|
|
|
+ StopKeyLogging;
|
|
|
+ Close(KeyLog);
|
|
|
+ Active:=False;
|
|
|
+ OldKeyBoardDriver.DoneDriver();
|
|
|
+end;
|
|
|
+
|
|
|
+Procedure SetKeyLogFileName(FileName : String);
|
|
|
+
|
|
|
+begin
|
|
|
+ If Not Active then
|
|
|
+ LogFileName:=FileName;
|
|
|
+end;
|
|
|
+
|
|
|
+Initialization
|
|
|
+ GetKeyBoardDriver(OldKeyBoardDriver);
|
|
|
+ NewKeyBoardDriver:=OldKeyBoardDriver;
|
|
|
+ NewKeyBoardDriver.GetKeyEvent:=@LogGetKeyEvent;
|
|
|
+ NewKeyBoardDriver.InitDriver:=@LogInitKeyboard;
|
|
|
+ NewKeyBoardDriver.DoneDriver:=@LogDoneKeyboard;
|
|
|
+ LogFileName:='keyboard.log';
|
|
|
+ Logging:=False;
|
|
|
+ SetKeyboardDriver(NewKeyBoardDriver);
|
|
|
+end.
|