messagebox penceresindeki butonu tıklama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

messagebox penceresindeki butonu tıklama

Mesaj gönderen Delhici »

Merhaba arkadaşlar

ya farklı bir programdaki bir çok bileşeni kendi programımdan seçtirebildim. Ancak messagebox penceresindeki tamam butonunun classını bulduramadım. Bu pencereeki tamam butonunu nasıl tıklatabilirim..

Yardımlarınızz için teşekkür ederim.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen mrmarman »

Sorduğunuz soru, bir programın butonuna nasıl click yollarım iken cevabı FindWindow ile altındakilere de FindWindowEx ile erişilir idi.

Bu durumda başka programın handle'ine eriştiğinizi ifade ettiğinize göre bu messagebox'ın da handle'ini nasıl arayıp da hangi şartlarda bulamadığınızı yazmamışsınız. Program hakkında fikir verirseniz tabi ulaşılabilir nitelikte bir program ise belki bizde de vardır inceler cevap yazardık.
Resim
Resim ....Resim
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen Delhici »

Ya aslında program üzerindeki birçok bileşenin class ve başlıklarını alıp üzerlerinde işlemler yapabildim. Ancak Messagebox penceresi üzerindeki buttona tıklayamadım. Kendisinin bağlı olduğu classı yazıyorum. Kendi Classını da yazıyorum. ANcak üzerindeki butonu tıklayamıyorum. Program şirket programı, yani özel yazılım. sizin görme ihtimaliniz yok yani muharrem bey. Ayrıca soruma sizin denk gelmeniz beni çok sevindirdi..
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen mrmarman »

Zamanın birinde PowerPoint Viewer'den direkt yazıcı çıktısı alamasınlar diye yazıcı ekranı gelir gelmez iptal butonuna basılması için bir timer/fonksiyon ikilisi hazırlamıştım. Burada print dialog penceresinin herhangi bir yazılımdan bağımsız çalıştığını görmüş buna göre önce açık olan "#32770" sınıfındaki pencereleri tespit ederek bu pencerelerin "screenClass" olup olmadığına bakıyordum. ( İngilizce / Türkçe veya başka bir dilde olabileceğinden başlığa baktırmıyorum ) Sonra da bunun bir yazıcı penceresi olduğuna kanaat getirdiğimde getparent() onun yönlendirildiği kaynak projeyi tespit edip eğer kaynak ilgilendiğim proje ise daha önce bir değişkende tuttuğum bu yazıcı penceresinin handle'ine yeniden dönerek FindWindowEx ile iki defa arama yaparak bulduğum ikinci butonun yazdırma iptal olduğunu bildiğimden ona focus olup butona bastırıyordum.

Bu sistemi kendiniz de uygulayabilirsiniz.. Özetle demek istediğim, o an açık olan messageboxların her birinin handle'inden yola çıkarak "GetParent" ile bun(ları)ın sizin ilgilendiğiniz yazılıma ait olup olmadığını sorgulayın. eğer öyle ise zaten yedekte tuttuğunuz handle nosundan herhangi bir yazılımın butonuna basmak gibi erişip hamlenizi gerçekleştirin.

Dilim / klavyem döndüğünce bu şekilde ifade edebiliyorum. Başarılar.
Resim
Resim ....Resim
umutcanster
Üye
Mesajlar: 153
Kayıt: 14 Tem 2008 12:28

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen umutcanster »

mrmarman yazdı:Zamanın birinde PowerPoint Viewer'den direkt yazıcı çıktısı alamasınlar diye yazıcı ekranı gelir gelmez iptal butonuna basılması için bir timer/fonksiyon ikilisi hazırlamıştım. Burada print dialog penceresinin herhangi bir yazılımdan bağımsız çalıştığını görmüş buna göre önce açık olan "#32770" sınıfındaki pencereleri tespit ederek bu pencerelerin "screenClass" olup olmadığına bakıyordum. ( İngilizce / Türkçe veya başka bir dilde olabileceğinden başlığa baktırmıyorum ) Sonra da bunun bir yazıcı penceresi olduğuna kanaat getirdiğimde getparent() onun yönlendirildiği kaynak projeyi tespit edip eğer kaynak ilgilendiğim proje ise daha önce bir değişkende tuttuğum bu yazıcı penceresinin handle'ine yeniden dönerek FindWindowEx ile iki defa arama yaparak bulduğum ikinci butonun yazdırma iptal olduğunu bildiğimden ona focus olup butona bastırıyordum.

Bu sistemi kendiniz de uygulayabilirsiniz.. Özetle demek istediğim, o an açık olan messageboxların her birinin handle'inden yola çıkarak "GetParent" ile bun(ları)ın sizin ilgilendiğiniz yazılıma ait olup olmadığını sorgulayın. eğer öyle ise zaten yedekte tuttuğunuz handle nosundan herhangi bir yazılımın butonuna basmak gibi erişip hamlenizi gerçekleştirin.

Dilim / klavyem döndüğünce bu şekilde ifade edebiliyorum. Başarılar.
hocam geçerken uğrayayım dedim de galiba siz usta kişiler başka dil konuşuyorsunuz.... :shock:
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen Delhici »

ÇOk teşekkür ederim Muharrem Bey;

Hallettim sorunu. Birde burası yeri değil ama sizin bat dosyaları ile hazırlanmış bir ghost projeniz vardı.. O projenizi boot cd oluşturarak yapabildinizmi? Konuyu şu topicte anlatmıştınız.
viewtopic.php?t=6721#37475
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen mrmarman »

"Ghost Image" alıp bunu bootCD'den yaptım evet.

Image aldıktan sonra Windows'a gelip NERO ile CD/DVD'ye yazarken "Bootable" olan proje oluşturup MS-Dos açılış disketini göstermeniz yeterli. CD/DVD FDD mode olarak bootable oluyor.

Şunu eklemek isterim. USBFlash Disk'lerle de bootable yapabiliyoruz. Ancak bu durumda Partition Sıralaması değişiyor. Boot edilen Flash Disk 1 nolu HDD olarak öne geçiyor. Bu durumda Kaynak/Hedef partitionumuz 1:1 iken ( 1'inci diskin 1'inci partitionu ) 2:1 ( 2'nci diskin 1'nci partitionu ) oluyor. USB boot kullanırsanız bat içeriklerini güncelleyin. Ben bunlar için de birer tane USBKUR.BAT, USBYEDEK.BAT oluşturup içinde bulunduruyorum.

"-or" parametresi ile hedef sürücünün boyutunun ihmal edilmesi eklendiğinden yanlış uygulamada (yani standart KUR.BAT ile ) 1:1 olan USB diske kurmaya çalışacaktır. "-or" parametresi ne işe yarıyor kaldır diyeceksin. Zaman içerisinde partition boyutuyla oynarsak daha sonra bu partitiona kurmak istersek; bu parametre olmadan partitionda fiziksel olarak yer olsa bile kurulum yapmıyor. Aslında bir daha düşündüm de sadece lazım olduğunda bu parametre eklenerek kullanılabilir. Kaldırmakta sakınca yok yani.
Resim
Resim ....Resim
Kullanıcı avatarı
igny
Üye
Mesajlar: 54
Kayıt: 14 Mar 2008 04:03

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen igny »

mrmarman yazdı:Zamanın birinde PowerPoint Viewer'den direkt yazıcı çıktısı alamasınlar diye yazıcı ekranı gelir gelmez iptal butonuna basılması için bir timer/fonksiyon ikilisi hazırlamıştım. Burada print dialog penceresinin herhangi bir yazılımdan bağımsız çalıştığını görmüş buna göre önce açık olan "#32770" sınıfındaki pencereleri tespit ederek bu pencerelerin "screenClass" olup olmadığına bakıyordum. ( İngilizce / Türkçe veya başka bir dilde olabileceğinden başlığa baktırmıyorum ) Sonra da bunun bir yazıcı penceresi olduğuna kanaat getirdiğimde getparent() onun yönlendirildiği kaynak projeyi tespit edip eğer kaynak ilgilendiğim proje ise daha önce bir değişkende tuttuğum bu yazıcı penceresinin handle'ine yeniden dönerek FindWindowEx ile iki defa arama yaparak bulduğum ikinci butonun yazdırma iptal olduğunu bildiğimden ona focus olup butona bastırıyordum.

Bu sistemi kendiniz de uygulayabilirsiniz.. Özetle demek istediğim, o an açık olan messageboxların her birinin handle'inden yola çıkarak "GetParent" ile bun(ları)ın sizin ilgilendiğiniz yazılıma ait olup olmadığını sorgulayın. eğer öyle ise zaten yedekte tuttuğunuz handle nosundan herhangi bir yazılımın butonuna basmak gibi erişip hamlenizi gerçekleştirin.

Dilim / klavyem döndüğünce bu şekilde ifade edebiliyorum. Başarılar.
hocam ufak bi örnek ile gösterebilirmisiniz
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen mrmarman »

Örnekle derken bana bir örnekle yaklaşın ki ben de ona karşılık örnek hazırlayım. Bu forumda yazdığınıza göre siz de programcısınız ve beni anlamanız lazım.

Hazırlamış olduğum proje ticari bir yazılım olduğundan ( bu işlem de o yazılımın kalbi :lol: ) kodlarını açarsam arkasından dolaşan olur.

Bana bir yazılım önerin, o yazılımdaki şu butona bastıramıyorum deyin inceleyip örnekleyim. Yoksa şimdi butonu bulunamayan bir yazılım hazırlayım ardından da bu butona tıklayan başka bir yazılımı hazırlayım olmaz. Hedefe odaklanalım. Ben üşenmeden her soru sorana örnek proje hazırlıyorum zaten.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: messagebox penceresindeki butonu tıklama

Mesaj gönderen mrmarman »

Başka bir başlık açtığını gördüm. Buradan özetleyip o linke yönlendiricem.

viewtopic.php?f=2&t=27319&p=152504#p152504

// Yapılacak işlem :
// - #32770 bizim dialog penceremiz... Birden fazla varsa
// bunların hangisinin bize ait olduğuna karar vericez..

// a- #32770'in Parentine bakınca 'NotePad' classname ile 'Note Defteri' görmeliyiz...
// b- Child'ına bakıldığındaki gördüğümüz classname 'DirectUIHWND' olmalı
// c- onun da Child'a bakıldığındaki gördüğümüz classname 'CtrlNotifySink' olmalı

// - Butonlarımızın parenti 'CtrlNotifySink' clasname olduğunu biliyoruz.

// - arayacağımız nedir ? handle nosunu bildiğimiz 'NotePad' ve
// yukarıdaki şartlara uyan ve
// 'CtrlNotifySink' olanların altındaki butonlar...

Sana bir fonksiyon hazırladım. İstediğin işlemi birebir yapıyor... İçine de açıklamaları detaylı bir şekilde yaptım.
viewtopic.php?f=2&t=27319&p=152504#p152504
Resim
Resim ....Resim
Cevapla