Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Delphi => Konuyu başlatan: Zoroaster - 27 Nisan 2017, 13:38:48

Başlık: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: Zoroaster - 27 Nisan 2017, 13:38:48
Daha önce mouse ile benzer talebim olmuştu ve forumda çözüm getirilmişti.

PC de bir yazılım var. Bu yazılımı kullanan (insan gibi davranan) bir yazılım geliştirmem gerekiyor. Fakat bazı veri giriş alanlarına veri girilmesi gerekiyor.

Yazılımım veri girilecek alanı mouse ile tıklayacak. Ardından da buraya klavyeden veri giriliyormuş gibi veri yazacak.

Bu kısmı Delphi ile nasıl yapabilirim?


Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: boreas - 27 Nisan 2017, 13:54:44
Veri girilecek programda size mi ait yoksa harici bir yazılıma atıyorum windows notepad gibi bir programa mı veri girilecek.
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: Zoroaster - 27 Nisan 2017, 14:05:40
Veri girilecek program bana ait değil. Kaynak kodları falan da yok o sadece bir uygulama.

Daha önceleri benzer bir robot program yazmıştım. Robot yazılım uygulama ekranını gözlüyor beklenen durum olduğunda uygulamadaki bir butonu tıklıyordu.

Şimdi daha gelişkin bir robot yazılım yapmaya çalışıyorum.
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: mufitsozen - 27 Nisan 2017, 15:39:56
AutoIt
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: ds01 - 27 Nisan 2017, 16:02:37
http://www.gezginler.net/indir/auto-mouse-click.html  hocam ben bunu kullanmıştım daha önce ekranda önceden ayarladıgınız koordinatlara gidiyor sağ tuş sol tuş kopyala yapıştır vs yapılıyor. Birde şöyle birşey var halen kullanıyorum. http://m.ebay.com/itm/400985432499?_mwBanner=1  klavye , fare yerine kullanılabiliyor. Bunun yaptığı işi düz atmega chipleride yapabiliyor illa bu ürünü almanızda şart değil
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: Zoroaster - 27 Nisan 2017, 16:21:47
Örnek gösterdiğiniz programlar ekranı takip ediyormu bilmiyorum. Bahse konu uygulama web tabanlı ve clicklenen buton vs bilgisi servere gidip cevaplar web üzerinden geliyor ve ekrandaki görüntü tıklama ardından hemen oluşmuyor.

Dolayısı ile robotun ekranı izleyip klavye verisi girilecek editbox'ın ekrana gelip gelmediğini bilebilmesi gerekiyor.

O kısımları dert değil şu anda bana sadece klavyeden basılmış gibi uygulamaya data yollamam yeterli.

Özel klavye ile falan da işim olmamalı. Aradığım şey basit bir win fonksiyonudur.
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: sovalye - 27 Nisan 2017, 16:27:20
WM_KEYUP ve WM_KEYDOWN fonksiyonlari istediginiz isi yapiyor. Onlara bakabilirsiniz
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: kutahyaspor - 27 Nisan 2017, 20:06:33
"keybd_event" bir diğer ipucu kelime.
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: engerex - 27 Nisan 2017, 21:08:21

Önce "a" tuşuna basıyor ardından "a" tuşundan kaldırıyoruz.


keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0);


Biraz daha detaya inersen ilgili pencereyi yakalayıp editler içinde dolaşarak ilgili kısımları doldurabilirsin.
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: Zoroaster - 28 Nisan 2017, 01:23:46
Biraz daha detaya inip ilgili pencereyi yakalamaktan bahsetmişsin.

Eğer ilgili pencereyi yakalamın pratik bir yolu varsa açıklayabilirmisin. Bu işimi çok kolaylaştırır zira mevcut yapıda işi dolaylı yoldan çözdüm, robot yazılımım ekran fotosunu çekip beklenen pencere çıktımı diye imaj işlemleri yapıyor.

@engerex ana konuyla ilgili cevabın için teşekkürler. İşimi gördü.
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: yas - 28 Nisan 2017, 10:05:33
@Zoroaster hocam, sizin isteğinizden anladığım bilgisayarda çalışan kaynak kodları olmayan paket programa ait ilgili textboxlara tıkladıkça hangisine tıklandığının bulunarak ilgili bilginin klavyeden giriliyormuş gibi doldurulması. Eğer anladığım doğruysa bunu sağlıklı olarak yapmanın en iyi yolu windowsun uygulamaya atadığı HANDLE numaralarını bilmek. Paket programın kaynak kodu elinizde olsaydı işlem çok kolaydı fakat yinede imkansız değil çalışan paket programın handle numaralarına erişebilmenin bir yolu bulunursa (bence muhakkak vardır.) gerisi çorap söküğü olur.


Kaynak kodu içerisinde Handle kullanılışı hatırladığım kadarıyla vb6 yazım şekilleri


Me.hWnd
Screen.ActiveForm.hWnd


gibiydi.


Birde aşağıdaki linkteki örnek işinize yarayabilir.


http://stackoverflow.com/questions/42787272/using-handles-to-extract-data-from-external-application
Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: engerex - 28 Nisan 2017, 22:43:02
Bir tane Not Defteri açın ve uygulamanızdaki bu butona tıklayın. Mouse ile tıklamanıza gerek kalmıyor. Ancak biraz çaba istiyor.
Ekleme : Bu örnekte Not defterinin aktif olmasına gerek yok. Hatta note defterinin farklı bir formu ekranda iken bile tuş ilgili kutucuğa gidiyor.

procedure TForm1.Button1Click(Sender: TObject);
var
Pen_Nu,Edit_Nu: Thandle;
begin
Pen_Nu := FindWindow('Notepad', nil);
Edit_Nu    := FindWindowEx(Pen_Nu, 0, 'Edit', nil);
postMessage(Edit_Nu, WM_KEYDOWN,65,0);
end;



Başlık: Ynt: Yazılımla windowsda klavyede istenilen tuşa bastırmak.
Gönderen: muhittin_kaplan - 29 Nisan 2017, 10:51:54
vb de doğrudur, her pencereye bir UniqId verir(Hwnd), ve her pencere içerisindeki kontrolede bir id verir, hatırladığım kadarıyla bunları öğrenmek için spy++ adında bir tool kullanıyordum.
aşağıdaki videoda "pencere başlığından" yakalayarak, key gönderiyor.
https://www.youtube.com/watch?v=f_ZBFJMlhYQ