Скачать MetaTrader 5

Передача системного сообщения в эксперт?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114277
Forex Trader  
Существует ли возможность запустить в коде эксперта обработчик сообщения (имеется ввиду Windows Messages) навешанного на определенный график? Интересует как зная хендл окна передать ему сообщение, по которому будет произведен запуск какой-либо функции. Или как вариант просто выставить значение переменной, а там дальше уже эксперт при следующем тике его словит?

То что из эксперта/индикатора можно высылать сообщения другим окнам - это понятно глядя на WinUser32.mqh, а вот как сделать перехват события - неясно.
MetaQuotes Software Corp.
Модератор
184317
MetaQuotes Software Corp.  
К сожалению, перехват событий окна из эксперта невозможен. Эксперты ничего не перехватывают, их активирует только приход ценового тика.
Forex Trader
114277
Forex Trader  
Для этой цели подошла бы обработка внешнего файла.
Однако для оперативности необходимо дать возможность работать с файлами, расположенными не только в предопределённой директории, но и на виртуальном диске, например.
Тким образом было бы легко "сочленить" всё что угодно.
Forex Trader
114277
Forex Trader  
К сожалению, перехват событий окна из эксперта невозможен.
Хорошо, а если приаттачить DLL к эксперту? Внутри DLL message можно перехватить?
Forex Trader
114277
Forex Trader  
Можно оконным субклассингом, с помощью WinAPI-функции EnumWindows (lpEnumFunc, lParam), где первый аргумент - адрес пользовательской функции обратного вызова (что надо сделать с окном), второй - передаваемый параметр, и ей подобных. При таком подходе требуется крайняя осторожность, чтоб не грохнуть систему.
Forex Trader
114277
Forex Trader  
Еще хуки есть ... :))
MetaQuotes Software Corp.
Модератор
184317
MetaQuotes Software Corp.  
Еще хуки есть ... :))

Перехватить - не проблема, хендл окна штатно можно получить и передать в DLL. А вот при снятии хука на отключении эксперта могут быть проблемы. Мы сами не пробовали. Теоретически все должно работать, если не сработает, то мы постараемся поправить у себя (если это возможно).

Если DLL перехватывает чужое и глубокое, то эксперт должен быть очень чистым и ни в коем случае не должен уходить в длительную спячку. Иначе эксперт на снятии может быть принудительно терминирован из-за таймаута, что повлечет за собой пропуск корректного завершения. А затем и креш.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий