#define CB_GETCURSEL 0x0147 uint hwndCombo = GetDlgItem( Nastroy, 0x4D7 ); uint selectedIndex = SendMessageA( hwndCombo, CB_GETCURSEL, 0, 0 );
Пока непонятно.
- Как выяснить что сейчас включено из Long & Short - Only Long - Only Short ?
- И что включает конкретно Long & Short - конкретно Only Long - конкретно Only Short?
#define CB_GETLBTEXT 0x0148 #define CB_GETLBTEXTLEN 0x0149 uchar buf[]; uint len = SendMessageA( hwndCombo, CB_GETLBTEXTLEN, selectedIndex, 0 ); ArrayResize( buf, len ); SendMessageA( hwndCombo, CB_GETLBTEXT, selectedIndex, buf ); string comboText = CharArrayToString( buf );
SendMessageA( hwndCombo, CB_GETLBTEXT, selectedIndex, buf );
ошибка при компиляции
'buf' - parameter conversion not allowed _WinApiAllTrade.mq4 96 80
хочет тип int
#define CB_GETCURSEL 0x0147 uint hwndCombo = GetDlgItem( Nastroy, 0x4D7 ); uint selectedIndex = SendMessageA( hwndCombo, CB_GETCURSEL, 0, 0 );
Этот код возвращает состояние Long & Short - Only Long - Only Short
цифрами 0, 1, 2
уже прогресс. Спасибо.
Теперь надо еще переключать ....
Теперь надо еще переключать ....
CB_SETCURSEL (0x014E)
Всем большое спасибо! Работает.
#define CB_GETCURSEL 0x0147 #define CB_SETCURSEL 0x014E #include <WinUser32.mqh> #import "user32.dll" int GetAncestor(int hWnd, int gaFlags); int GetDlgItem(int hDlg, int nIDDlgItem); int GetLastActivePopup(int hWnd); int IsDlgButtonChecked(int hdlg, int idButton); int CheckDlgButton(int hdlg, int idButton, uint check); //void CheckRadioButton (int hdlg, int idFirstButton, int idLastButton, int idCheckButton); int DlgDirListComboBox (int hdlg, string lpszPath, int idListBox, int idStatic, uint uFileType); //bool DlgDirSelectComboBox(int hdlg, string lpszBuffer, int idListBox); #import void start() { int hMetaTrader, hDlg, hChart = WindowHandle(Symbol(),Period()); int Nastroy; hMetaTrader = GetAncestor(hChart,2); //дескриптор основного окна терминала PostMessageA(hMetaTrader,WM_COMMAND,33048,0); //вызываем окно свойств советника Sleep(100); hDlg = GetLastActivePopup(hMetaTrader); //получаем дескриптор всплывающего окна Print("hDlg= ", hDlg); //hButtonSave = GetDlgItem(hDlg,1); //определяем дескриптор кнопки "Сохранить" Nastroy = GetDlgItem(hDlg, 0); //определяем дескриптор Настройки Print("Nastroy= ", Nastroy); //------------------------------ Разрешить торговать if(IsDlgButtonChecked(Nastroy, 0x3F3) == 0) { Print("0x3F3 CheckDlgButton= ", CheckDlgButton(Nastroy, 0x3F3, 1) ); // Разрешить торговать }else { Print("0x3F3 CheckDlgButton= ", CheckDlgButton(Nastroy, 0x3F3, 0) ); // запретить торговать } //------------------------------ Разрешить dll if(IsDlgButtonChecked(Nastroy, 0x3F1) == 0) { Print("0x3F1 CheckDlgButton= ", CheckDlgButton(Nastroy, 0x3F1, 1) ); // Разрешить dll }else { Print("0x3F1 CheckDlgButton= ", CheckDlgButton(Nastroy, 0x3F1, 0) ); // запретить dll } //-------------------------------- Переключить 0-Long 1-Short 2-Long Short uint hwndCombo = GetDlgItem( Nastroy, 0x4D7 ); int SelCh = 2; // 0-Long 1-Short 2-Long Short SendMessageA( hwndCombo, CB_SETCURSEL, SelCh, 0 ); //-------------------------------- Посмотреть 0-Long 1-Short 2-Long Short uint selectedIndex = SendMessageA( hwndCombo, CB_GETCURSEL, 0, 0 ); Print("selectedIndex= ", selectedIndex); }
Спасибо, скрипт переключает. Но надо бы закрыть диалоговое окно - нажать Enter в конце keybd_event(13,0,0,0); так?
Спасибо, скрипт переключает. Но надо бы закрыть диалоговое окно - нажать Enter в конце keybd_event(13,0,0,0); так?
Sleep(2000); uint hButtonOk = GetDlgItem(hDlg, 1); //дескриптор кнопки "Ok" PostMessageA(hDlg, WM_COMMAND, 1, hButtonOk); //нажимаем кнопку OkТипа так. Добавить к коду в конце. Через 2 сек нажмет Ок, это чтобы на чекбоксы посмотреть.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Написал как управлять через winapi чекбоксами
настройки советника - Общие
- разрешить DLL
- Разрешить советнику торговать
Не получается разобраться как контролировать и управлять - Long & Short - Only Long - Only Short
Подозреваю что надо использовать DlgDirListComboBox и DlgDirSelectComboBox
а как?