![]() |
|
|
#1 (permalink) |
|
Astteğmen
![]() Üyelik tarihi: Sep 2008
Mesajlar: 41
|
Delphide Harici Programlara Erişmek
Çoğu zaman sormuşuzdur kendi formumuzdan diğer yazılımlara nasıl hakim oluruz diye.. (herhangi bir programın editine yazı yazdırmak ya da butonuna tıklamak .. gibi) bunları windows’u kullanarak küçük bir ilüzyonla yapmak mümkün,yalnız baştan belirteyim ben bu konuda uzman değilim sadece bildiklerimi sizlere aktarıyorum ve bu dökümana eksiği varsa üstadlarımdan ekleme yapmalarını rica ediyorum. delphide ,harici (dışarıdan) bir programa herhangi bir şey (yapabileceklerimiz sınırlı) yapmak istiyorsak o programın handle no’sunu bilmemiz gerekir bunu da "findwindow" ve "findwindowex" fonksiyonlarıyla yaparız."findwindow" fonksiyonu 2 tane parametre içerirken "findwindowex" fonksiyonu 4 tane parametre içerir. Küçük bir örnekle olayı anlatayım procedure TForm1.Button1Click(Sender: TObject); var i:thandle; {isterseniz "i:hwnd;" ya da "i:integer" yazabilirsiniz} begin i:=findwindow(’SciCalc’,’Hesap Makinesi’); if i<>0 then // eğer handle nosunu bulamassa "0" değerini döndürür begin form1.caption:=inttostr(i); //hesap makinesinin handle nosunu form başlığına yazdırıyoruz end; end; end. Burada "findwindow" fonksiyonunun birinci parametresi (yani; SciCalc) hesap makinesinin sınıf adıdır,ikinci parametresinin adı(yani; Hesap Makinesi) bu da hesap makinesi programının form başlığının (yani; Caption) adıdır. Genel olarak Harici Programlarının handle nosu bu şekilde bulunur,şimdi peki biz bu programların sınıf ve form başlığı adlarını nerden bilecez derseniz: Başlat-->Programlar-->Borland Delphi 7-->Winsight32.exe yi açıyoruz orada açık olan tüm programların handle nolarıyla sınıf adları ve form başlıkları bulunmaktadır anlıyacağınız aslında direk handle nosunu buradan sayısal olarak alabiliriz ama fonksiyonla almak daha makbule geçiyor. Winsightta {} arasındaki yazılar programın sınıfını," " arasındaki yazılar da başlığını temsil etmektedir. Evet şimdi handle nosunu almayı artık biliyoruz sıra geldi handle nosu bilinen programa mesaj göndermek.(Burada belirteyim harici programlara benim bildiğim sadece windows mesajlarıyla hakimiyet kurabiliriz yani editlerine yazı göndermek,butonlarına tıklatmak bu yolla oluyor).Bu mesaj gönderme olayını da "sendmessage" ve "postmessage" fonksiyonlarıyla yapıyoruz bu fonksiyonların kullanım şekli aynı olmakla birlikte 4 tane parametre içerirler. Şimdi Not Defterine yazı gönderen bir örnek yapalım: procedure TForm1.Button5Click(Sender: TObject); var Pencere_no,Edit_No: Thandle; begin Pencere_no := FindWindow(’Notepad’, nil); Edit_no := FindWindowEx(Pencere_no, 0, ’Edit’, nil); postMessage(Edit_no, WM_KEYDOWN,65,0); end; end. Burada önce handle nosunu aldık fakat "findwindow"un 2. parametresine başlık yazmayıp "nil" diyerek es geçtik,aynı "sınıf" ta birden fazla form varsa haliylen birden fazla form başlığı olucağı için böyle bir durum da "nil" yerine başlığı yazmalıyız aksi halde yanlış handle alırız siz her halükarda başlığı yazmaya gayret edin not defterinin form handle nosunu aldıktan sonra,sıra üzerinde bulunan edit’inin(yani üzerine yazı yazdığımız kısım) handle nosunu almaya geldi. Bunu da "findwindowex" ile yaptık burada 1.parametre notdefterinin handle nosu,2.parametre handle noyu hangi sayıdan itibaren aramaya başlıyacağını belirtir(siz daima "0" bırakın),3.parametre sınıf adını(notpad’in Editinin sınıf adı winsight’tan bakarsanız "Edit" tir),4.parametre de başlık adını temsil eder(bilinmiyorsa "nil" diyerek es geçilir) ve artık not defterinin Editinin handle nosunu almayı da öğrendik. "postmessage" fonksiyonunun 1.parametresi notdefterinin editinin handle nosu,2.parametresi bir windows mesajıdır(windows mesajların tümünü uses satırının altındaki messages üzerinde mousu sağ tıklayarak "Open File At Cursor" ’ı seçerek görebilirsiniz),3. ve 4. parametreler de bu windows mesajının parametreleridir,3.parametre klavyede "a" tuşunun asci karşılığıdır,2.parametrenin(yani WM_KEYDOWN’ın) 4. bir parametresi olmadığı için 4.parametreye "nil" diyerek es geçtik evt programı çalıştırdığımızda(aynı anda not defteri de açık olmalı) not defterine butonu tıklayarak "a" yazdırdığınızı görüceksiniz Şimdi genelde çoğu kimsenin ilgisini çeken harici(dıaşrıda) bir programın butonuna tıklattırma olayıyla ilgili örneğe geçelim önce üzerinde 2 buton ve 1 edit bulunan bir exe yaptım,form başlığını "bey@z",butonlardan birinin başlığını "kelebek" yaptım sonra da bu butonun içine tıklandığını anlamak için " showmessage(’butona tıkladınız’) " diye bir fonksiyon ekledim ve exesini oluşturduktan sonra programı açık halde bekleterek aşağıdaki kodlara sahip olan programı çalıştırdım ve aşağıdaki programa tıkladığımda önceden açık halde bekleyen programın "kelebek" başlıklı butonuna da tıklatmış oldum procedure TForm1.Button7Click(Sender: TObject); var form_handle,button_handle:Thandle; begin form_handle:=findwindow(’TForm1’,’bey@z’); if form_handle<>0 then begin button_handle:=findwindowex(form_handle,0,’TButton ’,’kelebek’); if button_handle<>0 then begin postmessage(button_handle,BM_CLICK,0,0); end; end; end; aslında bu kadar kodu kasmadan şöylede yapabiliriz : procedure TForm1.Button7Click(Sender: TObject); begin postmessage(findwindowex(findwindow(’TForm1’,’bey@ z’),0,’TButton’,’kelebek’),BM_CLICK,0,0);} end; end. herneyse bir de bu "bey@z" form başlıklı programın editine yazı gönderelim o da şu şekilde; procedure TForm1.Button7Click(Sender: TObject); var form_handle,Edit_handle:Thandle; begin form_handle:=findwindow(’TForm1’,’bey@z’); if form_handle<>0 then begin Edit_handle:=findwindowex(form_handle,0,’TEdit’,ni l); if Edit_handle<>0 then begin postmessage(Edit_handle,WM_KEYDOWN,65,0); // "a" tuşu yolluyoruz end; end; end; end. evet arkadaşlar bu bahsettiğim örnekleri proje halinde upload ettim,kendimce gayet güzel bir döküman oldu ve çoğu kişiye faydalı olur inş Proje: [Linkleri görebilmek için üye olmalısınız. Üye olmak için tıklayınız...] ... __305_.rar _________________
__________________
İmzam Kişiligmdir |
|
|
|
![]() |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | |
| Stil | |
|
|
Benzer Konular
|
||||
| Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
| Delphide Trojen Yazma Anlatımı | By_FUCKan | Visual Basic ve Delphi | 0 | 07-16-2007 22:29 |
| Delphide win dosyasını çalıştır | By_FUCKan | Visual Basic ve Delphi | 0 | 07-16-2007 22:28 |
| Delphide Trojen Yazma Anlatımı | By_FUCKan | Visual Basic ve Delphi | 0 | 07-16-2007 22:27 |
| delphide setup oluşturma | By_FUCKan | Visual Basic ve Delphi | 1 | 07-16-2007 22:24 |
| Delphide Trojen Yazma Anlatımı | @ßy_HépTéKíz | ASP ve PHP DiLLeri | 0 | 06-12-2007 21:52 |