Delphi Exe Komut Gönderme (Sendkey)
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Delphi Exe Komut Gönderme (Sendkey)
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.
Re: Delphi Exe Komut Gönderme (Sendkey)
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.
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.
Re: Delphi Exe Komut Gönderme (Sendkey)
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.
Re: Delphi Exe Komut Gönderme (Sendkey)
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.
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.
Re: Delphi Exe Komut Gönderme (Sendkey)
çok teşekkür ederim hocam hemen deneyip sonucu buraya yazıyorum...
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: Delphi Exe Komut Gönderme (Sendkey)
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.
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;