![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
İlginç bir pencere buldum. İçinde bir şey yakalamak neredeyse imkansız. Pencerenin adı "Farklı kaydet". "Kaydet" düğmesine nasıl tıklanır
Özel olarak kaydet düğmesini seçerseniz, 0000001 buton koduna sahibiz.
Ancak bu kodu kullanarak ona erişirken hiçbir şey olmuyor. Bu isimsiz pencere nedir?
Bu bir açılır iletişim kutusudur. Sistem tanıtıcısı WinAPI işlevi GetLastActivePopup(int hWnd) kullanılarak elde edilebilir.
İşte bu işlevi kullanmanın bir örneği:
Ve onay kutularında, eğer orada değillerse, onay kutuları programlı olarak ayarlanabilir.
onlar. Bir onay işareti olup olmadığını kontrol edin, değilse, gerekirse koyun. Bu hangi Win API işlevleriyle yapılır?
WinAPI'de bir işlev bulundu:
CheckDlgButton Fonksiyonu
Tanım:function CheckDlgButton(Dlg: HWnd; IDButton: Tamsayı; Kontrol: Word);
Bir düğme denetimini işaretler veya işaretini kaldırır ya da üç düğmeli denetimin durumunu değiştirir.
parametreler:Dlg: Düğmeyi içeren iletişim bloğu.
IDButton: Değiştirilebilir düğme kontrolü.
Kontrol edin: kaldırıldı (0), kontrol edildi (1), grileştirildi (2).
Çalıştırmadan önce , düğmenin durumunu kontrol etmek için hangi işlev. Benim durumumda, onay kutusunda.
API temasının devamında
kaydederken - bu tekrar olursa soru ortaya çıkar!
farklı kaydet
(dosya var değiştirin)
otomatik vuruş EVET
WinAPI'de bir işlev bulundu:
CheckDlgButton Fonksiyonu
Tanım:function CheckDlgButton(Dlg: HWnd; IDButton: Tamsayı; Kontrol: Word);
Bir düğme denetimini işaretler veya işaretini kaldırır ya da üç düğmeli denetimin durumunu değiştirir.
parametreler:Dlg: Düğmeyi içeren iletişim bloğu.
IDButton: Değiştirilebilir düğme kontrolü.
Kontrol edin: kaldırıldı (0), kontrol edildi (1), grileştirildi (2).
Çalıştırmadan önce, düğmenin durumunu kontrol etmek için hangi işlev. Benim durumumda, onay kutusunda.
Bir radyo düğmesinin mevcut durumunu belirlemek için IsDlgButtonChecked işlevini kullanabilirsiniz:
Bu işlev, hdlg iletişim kutusunda bulunan idButton kimliğine sahip radyo düğmesinin durumunu döndürür. Anahtar kapalı durumdaysa, sıfır döndürülür. Etkinleştirilmiş bir radyo düğmesi için 1 değeri döndürülür.2 değeri, gri renkle gösterilen etkin olmayan bir radyo düğmesine karşılık gelir. Hata durumunda, negatif bir -1 değeri döndürülür.
---
IsDlgButtonChecked'in nasıl çalıştığına dair bir örnek burada bulunabilir
http://frolov-lib.ru/books/bsp/v12/ch3_2.htm
WinAPI öğrenme konusuna dönmeye karar verdim.
Microsoft Spy++ v.9.00.21022 kullanarak, programlı olarak işaretlenip işaretlenmediğini kontrol etmek için "Optimizasyon" onay kutusunun tanımlayıcısını bulmaya çalışıyorum.
Aşağıdaki işlemleri adım adım yapıyorum.
1. Terminali başlattı.
2. Test penceresi açıldı.
3. Spy++ programında pencere aramasını aradım ve "Optimizasyon" öğesini hedefledim
tamam düğmesine bastı.
4. Bir sonraki pencerenin sekmelerinden geçiyorum
Ve bu düğme için istediğim kodun nerede olduğunu anlayamıyorum.
Ilnur , YuraZ ve diğerleri bana ihtiyacım olan element için bu tanımlayıcı kodu nasıl tanımlayacağımı öğretiyor.
Neden kodları özellikle belirtmeden öğretmenizi istiyorum, çünkü diğer unsurları kendim nasıl belirleyeceğimi öğrenmek istiyorum. Belirtirseniz, belki de neyi arayacağımı ve nereye bakacağımı bilerek onları daha sonra bulmam daha kolay olacaktır ....
Burada "Start" butonunun ID'sinin nasıl belirleneceği konusunda bir kod örneği verdim.
Şekil ayrıca kontrol kimliğinin nasıl bulunacağını da gösterir.
Strateji tester penceresinde yer alan tüm kontroller aynı şekilde tanımlanır.
Örneğin, yukarıda yayınlanan resme bakılırsa, "Optimizasyon" onay kutusunun ("Genel" sekmesi) kimliği 0x405'tir.
Kodları çözdüm. 2 düğmenin kodlarını yakalayamadığım tek şey "Tarih"ten "Tarih"e kadar olan test ve optimizasyon tarihleri. Program 00000001 gösteriyor. İlnur bana bu düğmelerin kodlarını söyle.
Evet, gerçekten de bu öğelerin tanımlayıcıları aynıdır. Bu nedenle, bu durumda GetDlgItem() işlevini kullanmak mümkün değildir.
Geriye kalan tek seçenek, onları FindWindowExA() kullanarak tanımlamaktır. Ancak asıl soru, bunları tanımlamaya gerek olup olmadığıdır.
Bu unsurları yönetme yeteneği, yani. optimizasyon veya test periyodunu ayarlayın, MQL'de WinAPI yoktur.
Her ne kadar yanılıyor olsam da.
Evet, gerçekten de bu öğelerin tanımlayıcıları aynıdır. Bu nedenle, bu durumda GetDlgItem() işlevini kullanmak mümkün değildir.
Geriye kalan tek seçenek, onları FindWindowExA() kullanarak tanımlamaktır. Ancak asıl soru, bunları tanımlamaya gerek olup olmadığıdır.
Bu unsurları yönetme yeteneği, yani. optimizasyon veya test periyodunu ayarlayın, MQL'de WinAPI yoktur.
Her ne kadar yanılıyor olsam da.
örneğin ID - 0x0577 (uzman değiştir düğmesi) ile öğeyi bulun
ve NextWindow zincirine 3 kez tıklayın, sadece date From alanına giriyoruz: sonra NextWindow'dan iki kez daha geçiyoruz ve date To alanındayız:
her iki durumda da tarih alanlarını doldurmanız yeterli
SetWindowTextA( hwndEditDATEbeg, sDateBeg);
SendMessageA(hwndEditDATEbeg, EN_UPDATE, _ID_EDIT_HEX_DATEbeg, 0);
SendMessageA(hwndEditDATEbeg, EN_CHANGE, _ID_EDIT_HEX_DATEbeg, 0);
..
MSQL5'te, test cihazıyla iletişim kurmak için gerçekten düzenli bir araç almak istiyorum...