Merhaba
Herhangi bir programın menüsüne kendi programım içinden nasıl ulaşabilir ve ilgili menünün tıklanmasını sağlayabilirim.
başka bir programın menüsü nasıl çalıştırılır
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
başka bir programın menüsü nasıl çalıştırılır
Unutma Bilgi Güçtür
Öğrendiğin Kadar Bilirsin
İşte Bu Yüzden Paylaşmayı da Öğren!!!!
Öğrendiğin Kadar Bilirsin
İşte Bu Yüzden Paylaşmayı da Öğren!!!!
Selam.
- Delphi ile gelen WinSight programını incelemeni önericem. Bu program Windows Mesaj ağını senin ayaklarının altına seriyor.
- Bunları neden mi yazdım. Yaptığın her işlem, buna mouse hareketleri, bastığın tuşlar dahil; windows tarafından mesaj oluşturulur ve yine Windows tarafından daha create edilirken birer sıra numarası verdiği ilgili forma ulaştırılır.
- Araya bazı programlar girebilir. Buna müsade var. Yani bu durum basit tabirle kulaktan kulağa oyunu gibi bir hal de alabilir.
- Message Post denen bir teknikle Windows yerine bu mesajları siz oluşturup, araya girme olayını yapabilir, ilgili menünün ilgili itemine mesaj yollayıp, kullanıcı basmış da Windows bunun için mesaj oluşturmuş gibi davranmasını sağlayabilirsiniz.
- Ama önce Windows'un verdiği bu numarayı bilmek gerekiyor. Handle adı verilen Windows'un verdiği bu numarayı WinSight ile bulursunuz ama numaralar her windows açılışında ve/veya her form create olayında değişir.
- WinSight'i önermemin asıl nedeni bu numarayı bulmak değil, ilgili formun menusüne ulaşmak için gerekli minimum bilgi olan Form Adını ve sınıfını görüp, her zaman değişmeyen bir yapı sergilediğinden emin olduğunuz taktirde FindWindow api komutuyla bu keşfettiğiniz bilgiler yardımıyla ilgili Windows Handle numarasını dinamik olarak okuyabilirsiniz. Tabi bu okuduğunu numara ile hemen hemen herşeyi yaptırabilirsiniz. Çünkü forma ulaştıktan sonra onun Child denen çocuklarına erişmek için başlangıç noktanız var demektir.
- Hatta örnek olsun diye yazıyorum, istediğiniz formun AlwaysOnTop olan en üstte kalma özelliğini bile ortadan kaldırabilirsiniz.
- Başlangıç olarak bu kadarını anlatayım. Klavuz olsun diye altta Windows Hesap Makinesini çalıştıran kodu örnek olarak yazıyorum.
- Delphi ile gelen WinSight programını incelemeni önericem. Bu program Windows Mesaj ağını senin ayaklarının altına seriyor.

- Bunları neden mi yazdım. Yaptığın her işlem, buna mouse hareketleri, bastığın tuşlar dahil; windows tarafından mesaj oluşturulur ve yine Windows tarafından daha create edilirken birer sıra numarası verdiği ilgili forma ulaştırılır.
- Araya bazı programlar girebilir. Buna müsade var. Yani bu durum basit tabirle kulaktan kulağa oyunu gibi bir hal de alabilir.
- Message Post denen bir teknikle Windows yerine bu mesajları siz oluşturup, araya girme olayını yapabilir, ilgili menünün ilgili itemine mesaj yollayıp, kullanıcı basmış da Windows bunun için mesaj oluşturmuş gibi davranmasını sağlayabilirsiniz.
- Ama önce Windows'un verdiği bu numarayı bilmek gerekiyor. Handle adı verilen Windows'un verdiği bu numarayı WinSight ile bulursunuz ama numaralar her windows açılışında ve/veya her form create olayında değişir.
- WinSight'i önermemin asıl nedeni bu numarayı bulmak değil, ilgili formun menusüne ulaşmak için gerekli minimum bilgi olan Form Adını ve sınıfını görüp, her zaman değişmeyen bir yapı sergilediğinden emin olduğunuz taktirde FindWindow api komutuyla bu keşfettiğiniz bilgiler yardımıyla ilgili Windows Handle numarasını dinamik olarak okuyabilirsiniz. Tabi bu okuduğunu numara ile hemen hemen herşeyi yaptırabilirsiniz. Çünkü forma ulaştıktan sonra onun Child denen çocuklarına erişmek için başlangıç noktanız var demektir.
- Hatta örnek olsun diye yazıyorum, istediğiniz formun AlwaysOnTop olan en üstte kalma özelliğini bile ortadan kaldırabilirsiniz.
- Başlangıç olarak bu kadarını anlatayım. Klavuz olsun diye altta Windows Hesap Makinesini çalıştıran kodu örnek olarak yazıyorum.
Kod: Tümünü seç
Var
WindowsNumarasi : THandle;
WindowsAdi : String;
ProgAdi : String;
begin
WindowsAdi := 'SciCalc';
ProgAdi := 'Calc.exe';
WindowsNumarasi := FindWindow(PChar(WindowsAdi), Nil);
If IntToStr(WindowsNumarasi) = '0'
then WinExec( pChar(ProgAdi) , SW_MAXIMIZE) // Çalışmıyor yenisini çalıştır.
else SetForegroundWindow(WindowsNumarasi); // Arkada çalışıyor yenisini değil, mevcut olanı öne taşı.
end;
Merhabalar
Muharrem Bey yardımlarınız için çok teşekkür ederim. Sizin yönlendirmeniz sayesinde sorumun cevabını buldum..
Kod:
Muharrem Bey yardımlarınız için çok teşekkür ederim. Sizin yönlendirmeniz sayesinde sorumun cevabını buldum..



Kod:
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
whandle:hwnd;
menucub,ustmenu:hwnd;
begin
whandle:=FindWindow('Notepad',nil); //Notepad programının handle'nı bulur
SetForegroundWindow(whandle); //Notepad'i öne getirir
menucub:=getmenu(whandle); //menü çubuğunun handle'nı alır
ustmenu:=getsubmenu(menucub,1); //ikinci menü (Düzen) nün handle'nı alır
i:=GetMenuItemID(ustmenu,13); //Düzen menüsünün Saat/Tarih alt menüsünün identifier'ini döndürür
SendMessage(whandle,WM_COMMAND,i,0); //ilgili menu item'ına click mesajı gönderir
//ShowMessage(IntToStr(i));
end;
Unutma Bilgi Güçtür
Öğrendiğin Kadar Bilirsin
İşte Bu Yüzden Paylaşmayı da Öğren!!!!
Öğrendiğin Kadar Bilirsin
İşte Bu Yüzden Paylaşmayı da Öğren!!!!
Merhaba Muharrem Bey
Ben Windows XP kullanıyorum ve NotePad'in Düzen Menüsünde 13 tane menu item var bunlardan 3 tanesi separator görevi görüyor bunları dahil edince sonuç 13 çıkıyor.. Merak ettim doğrusu siz hangi işletim sistemini kullanıyorsunuz?
ve o işletim sisteminin notepad'in Düzen menüsünde tarih/saat item'i söylediğiniz gibi 8'inci sırada?
Ayrı Bir nokta: Bunu slogan haline getireceğim ----> Ne Kadar Windows Api O Kadar Köfte....
Kolay Gelsin
Ben Windows XP kullanıyorum ve NotePad'in Düzen Menüsünde 13 tane menu item var bunlardan 3 tanesi separator görevi görüyor bunları dahil edince sonuç 13 çıkıyor.. Merak ettim doğrusu siz hangi işletim sistemini kullanıyorsunuz?
ve o işletim sisteminin notepad'in Düzen menüsünde tarih/saat item'i söylediğiniz gibi 8'inci sırada?
Ayrı Bir nokta: Bunu slogan haline getireceğim ----> Ne Kadar Windows Api O Kadar Köfte....



Kolay Gelsin
Unutma Bilgi Güçtür
Öğrendiğin Kadar Bilirsin
İşte Bu Yüzden Paylaşmayı da Öğren!!!!
Öğrendiğin Kadar Bilirsin
İşte Bu Yüzden Paylaşmayı da Öğren!!!!