Otomatik tuşa basma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Otomatik tuşa basma

Mesaj gönderen kaan_karabey »

Arkadaşlar elimde delphi kodları var ama bu kodda nasıl bir düzenleme yaparsam 8-9 tuşlarına basarak saniyeden daha düşük bir sürede KO da kullanılabilir hale getirebilirim???

Kod: Tümünü seç

unit Unit1; 

interface 

uSes 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
Dialogs, StdCtrls, ExtCtrls; 

type 
TForm1 = class(TForm) 
Memo1: TMemo; 
Timer1: TTimer; 
memo3: TMemo; 
Button1: TButton; 
Button2: TButton; 
Edit1: TEdit; 
Label1: TLabel; 
Label2: TLabel; 
Memo2: TMemo; 
Button3: TButton; 
procedure Memo1KeyDown(Sender: TObject; var Key: Word; 
Shift: TShiftState); 
procedure Timer1Timer(Sender: TObject); 
procedure Button1Click(Sender: TObject); 
procedure Button2Click(Sender: TObject); 
procedure Button3Click(Sender: TObject); 
private 
{ Private declarations } 
public 
{ Public declarations } 
end; 

var 
Form1: TForm1; 

implementation 

{$R *.dfm} 
procedure Delay(ms : longint); 
var TheTime : LongInt; 
begin 
TheTime := GetTickCount + ms; 
while GetTickCount < TheTime do 
Application.ProcessMessages; 
end; 

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; 
Shift: TShiftState); 
var 
i:integer; 
begin 
memo3.Lines.DelimitedText:=pchar(memo3.lines.CommaText)+intTostr(key)+'.'; 
memo2.Lines.add(inttostr(key)); 
memo2.Lines.EndUpdate; 
end; 

procedure TForm1.Timer1Timer(Sender: TObject); 
var 
winhand:Hwnd; 
i,x,z:integer; 
begin 
//Herhangi bir pencereyi aktif yapabilmek için timera yazdım ve 3 sn yeye ayarladım... 

WinHand := GetActiveWindow; //aktif pencereyi alıyor... 
SetForegroundWindow(WinHand); 
for i:=0 to memo2.Lines.Count-1 do //harfleri yazması için döngü... 
begin 

keybd_event(strtoint(memo2.Lines), 0, 0, 0); //memo2 den karakterleri alıp yolluyor... 

keybd_event(strtoint(memo2.Lines), 0, KEYEVENTF_KEYUP, 0); 

end; 

end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
timer1.Enabled:=false; 
memo1.Enabled:=true; 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
timer1.Interval:=strtoint(edit1.text); 
memo1.Enabled:=false; 
timer1.Enabled:=true; 
end; 

procedure TForm1.Button3Click(Sender: TObject); 
begin 
memo1.Clear; 
memo2.Clear; 
memo3.Clear; 

end; 

end.
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Re: Otomatik tuşa basma

Mesaj gönderen kaan_karabey »

Kimse Cvp Vermeyecek Mi Arkadaşlar???
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Otomatik tuşa basma

Mesaj gönderen PROGRAMADOR »

Yöntem yanlış. Çünkü bu tür klavye üzerinde yapılan kodlama işlemlerini KO alıgılıyor ve ban yiyorsunuz. Benim daha iyi bir önerim var. Klavye portundan veri göndererek bu işlemi yapabilirsin. Sanki gerçekten klavyenden tuşlara basılıyormuş gibi algılar program.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Otomatik tuşa basma

Mesaj gönderen SimaWB »

kaan_karabey yazdı:Kimse Cvp Vermeyecek Mi Arkadaşlar???
@PROGRAMADOR sorunuza cevap verip "KO algılıyor ve ban yiyorsunuz" dedikten sonra; "ban"dan bahsedildiğini görünce KO'nun bir oyun olabileceğini anladım. Internetten araştırınca Knight Online olduğunu anladım :)
Soru sorarken sizin anladığınız şekilde değil de herkesin anlayacağı şekilde sorarsanız daha çok yada daha açıklayıcı cevaplar alırsınız....
There's no place like 127.0.0.1
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Otomatik tuşa basma

Mesaj gönderen xxxjedixxx »

Merhaba,

Program mantığı ile ilgili yorum yapmıyorum. Sadece senin verdiğin kodda keybd_event'i yanlış kullandığını görüyorum. keybd_event fonksiyonu yazdığın şekilde karakteri sayıya çevirerek çalışmaz. Karakterin ASCII kodunu yani Ord fonk.'dan geri dönen sayıyı göndermelisin. Kodunu aşağıdaki gibi değiştirirsen sonuç almaya başlarsın. Programının mantığı sana kalmış.

for döngünü şu şekilde değiştir.

Kod: Tümünü seç

  ...
  for i:=0 to memo2.Lines.Count-1 do //harfleri yazması için döngü...
  begin
    if Trim(memo2.Lines[i]) = '' then Continue;
    for j := 1 to Length(memo2.Lines[i]) do // bu döngü, memo'nun ilgili satırı 1 karakterden fazlaysa, herbirini göndermesi için yazıldı
    begin
      keybd_event(Ord(memo2.Lines[i][j]), 0, 0, 0); //memo2 den karakterleri alıp yolluyor...
      keybd_event(Ord(memo2.Lines[i][j]), 0, KEYEVENTF_KEYUP, 0);
    end;
  end;
  ...
Cevapla