Delphi Exe Komut Gönderme (Sendkey)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
seci20

Delphi Exe Komut Gönderme (Sendkey)

Mesaj gönderen seci20 »

merhaba ustalarım çözümünü bulamadığım bir sorunum var.sorunum şu.sendkey ile bir programa 'Yes' yazısını gönderip enter yapmam gerekli normal pencere acıkken bunu basarabılıyorum.ama gizli iken bir türlü başaramadım.appactivate ile seçtiğim halde genede yazmıyor.diyelimki worda yazmasını istedim ve word gizli çalışıyor.ama ben notepad ekranında olım oraya yazıyor.umarım tam anlatabılmısımdır.illa sendkey olması şart değil programa nasıl 'Yes' yazısını gönderebilirim dediğim gibi program gizli konumda.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Delphi Exe Komut Gönderme (Sendkey)

Mesaj gönderen mrmarman »

InActive formlar sendkeys benzeri windows mesajlarını dikkate almazlar. (api ile hedefinde beklediği bir mesaj yoksa)

Yapacağınız işlem, önce formun minimized olup olmama durumu gibi mevcut halini sorgulayıp, iconic vs ise restore ederek aktifleştirip, ardından ilgili alana focus olacak dilediğiniz ifadeyi göndereceksiniz. Ardından da dilerseniz önceki hali ne ise o hale dönmesini sağlayacaksınız.

Böyle bir zincirleme operasyon gerekli.
Resim
Resim ....Resim
seci20

Re: Delphi Exe Komut Gönderme (Sendkey)

Mesaj gönderen seci20 »

hocam dediğinizi tam olarak anlamadım.hani armut piş ağzıma düş tarzı değilde sunları sunları kullanman lazım dıye anlatabılırmısınız rica edersem.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Delphi Exe Komut Gönderme (Sendkey)

Mesaj gönderen mrmarman »

1. Hedef pencere mevcut mu kontrol et ( FindWindow )
2. Program penceresi aktif ve erişilebilir mi ? ( IsWindowVisible )
3. Pencere minimize mi ? ( IsIconic ) ( GetWindowPlacement ) ise Restore Et ( ShowWindow ile SW_RESTORE )
bundan sonrasını zaten yaptığını söylemiştin.

4. Ondan sonra yazı yazılacak ilgili alt kontrole ulaş ( FindWindowEX )
5. Buton bas vs. ( SendMessage )
6. Yazı Yaz ( Sendkeys unitini kullanıyorsundur )

vs.vs.
Resim
Resim ....Resim
seci20

Re: Delphi Exe Komut Gönderme (Sendkey)

Mesaj gönderen seci20 »

çok teşekkür ederim hocam hemen deneyip sonucu buraya yazıyorum...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Delphi Exe Komut Gönderme (Sendkey)

Mesaj gönderen xxxjedixxx »

Merhaba,

Notepad ile çalışan basit bir kod yazdım. Tuş gönderme ve direkt metin gönderme ile ilgili iki ayrı yöntemi de koda ekledim. Ayrıca deneme için button2'ye tıklayarak Notepad'i gizleyip tekrar gösterebilirsin. Ben denedim, notepad gizli iken de çalışıyor.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var hwnd1, hwnd2: THandle;
    txt: string;
    i: integer;
begin
  txt := 'YES';
  hwnd1 := FindWindow('NotePad', nil); 
  if hwnd1 = 0 then Exit;
  hwnd2 := FindWindowEx(hwnd1, 0, 'Edit', nil);
  if hwnd2 = 0 then Exit;

//1. yöntem, karakterleri tek tek gönderme
  for i := 1 to Length(txt) do
    PostMessage(hwnd2, WM_KEYDOWN, Ord(txt[i]), 0);

//2. yöntem, direkt metin değiştirme. Bunu da deneyebilrisin
//  SendMessage(hwnd2, WM_SETTEXT, 0, Integer(PChar(txt)));

  PostMessage(hwnd2, WM_KEYDOWN, VK_RETURN, 0); // Enter
end;

procedure TForm1.Button2Click(Sender: TObject);
var hwnd: THandle;
begin
// Notepad'i gizle / göster
  hwnd := FindWindow('NotePad', nil);
  if hwnd = 0 then Exit;
  if IsWindowVisible(hwnd) then
    ShowWindow(hwnd, SW_HIDE)
  else
    ShowWindow(hwnd, SW_SHOW)
end;
Cevapla