Новая статья: Управление терминалом MetaTrader с помощью DLL

 

На mql5.com опубликована статья Управление терминалом MetaTrader с помощью DLL:

В данной статье рассматривается управление элементами интерфейса MetaTrader с использованием вспомогательной DLL-библиотеки на примере изменения настроек рассылки Push-сообщений. К статье приложен исходный код библиотеки и пример скрипта.

Имеется список MetaQuotesID, который составляет более четырех адресов для рассылки. Как известно, функция SendNotification использует только ID, указанные в окне настроек на вкладке "Уведомления". Таким образом, средствами MQL можно делать рассылку только на указанные ранее ID и не более четырех за раз. Попробуем исправить данную ситуацию.

Задачу можно решать двумя путями: написать полностью аналог функции для рассылки Push-сообщений или поменять настройки терминала и воспользоваться стандартной функцией. Первый путь довольно трудоемкий и, самое главное, не универсальный, поэтому был выбран другой вариант. Но и сами настройки терминала можно менять разными способами. Из тех что мне известны, это взаимодействие через интерфейс или подмена значений в памяти самого процесса. Хотя работа с памятью будет для пользователя выглядеть намного лучше, так как не будет мигающих окон, но при малейшей ошибке это может нарушить работу всего терминала. При работе через интерфейс мы в худшем случае не сможем найти нужное окно или кнопку.

Итак, в данной статье мы рассмотрим управление терминалом через интерфейс с помощью вспомогательной библиотеки DLL. В частности, будем рассматривать изменение настроек. "Общение" с терминалом будем организовывать через обращение к его окнам и компонентам, то есть так, как это делают обычные пользователи. Никаких вмешательств в процесс терминала не производим. Данный метод можно будет применять и для решения иных задач, к которым может привести самая неудержимая фантазия.

1.3. Работа с меню

Работа с меню, как и со всеми остальными компонентами, начинается после нахождения хэндла родителя, то есть определенного окна. После этого необходимо найти соответствующий пункт меню, подпункт и произвести его выбор.

Тут необходимо сделать важное замечание: количество пунктов меню в терминале изменяется в зависимости от того, развернуто окно графика или нет (см. рис. 2). Нумерация пунктов меню начинается с 0.

Рис. 2. Изменение количества пунктов меню

Рис. 2. Изменение количества пунктов меню

При изменении количества пунктов меню, соответственно, изменяется и порядковый номер пункта "Сервис". Поэтому при работе учитываем количество общее количество пунктов с помощью функции GetMenuItemCount(Hnd:HMenu), в которую передается хэндл меню.

Автор: Galina Bobro

Причина обращения: