Необходимо определить handle родительского окна терминала. Предполагается, что одновременно запущено несколько терминалов. Поэтому определить нужно handle именно того терминала, в котором запущен скрипт.
Как правильно это сделать?
Я уже черт побери мучался с этой проблемой. Я бы рекомендовал по заголовку терминала определять окно.
Я уже черт побери мучался с этой проблемой. Я бы рекомендовал по заголовку терминала определять окно.
Можно и так, но это не как не связывает скрипт, который работает
в терминале и сам терминал, если, например, запущено несколько
терминалов.
Я пробовал через WindowHandle() в скрипте получить дескриптор окна графика, а в dll-ке по нему найти родительское окно. Но результаты получались разные(!) для каждого графика. Попробовал также через дескриптор окна терминала найти дескрипторы дочерних окон, так вот, полученные дескрипторы отличались от тех, которые выдавала WindowHandle(). Такая вот проблемма.
Я исследовал окна терминала утилитой Spy++.
Вот что она показала.
WinAPI функция FindWindow пробовали? Там можно задавать как параметр заголовок окна - http://msdn2.microsoft.com/en-us/library/ms633499.aspx
Первый параметр - NULL, второй - что-то типа "343243: MetaTrader - Demo Account - [EURUSD,H1]"
WinAPI функция FindWindow пробовали? Там можно задавать как параметр заголовок окна - http://msdn2.microsoft.com/en-us/library/ms633499.aspx
Первый параметр - NULL, второй - что-то типа "343243: MetaTrader - Demo Account - [EURUSD,H1]"
Можно и так, только, опять-таки, нет связи между скриптом работающем
в терминале и самим терминалом, если, например, их запущено несколько
Нужно "подняться" по иерархии окон на 3 родительских окна. Соответственно 3 вызова GetParent().
Все правильно. Совсем забыл про иерархию ) Спасибо большое!
WinAPI функция FindWindow пробовали? Там можно задавать как параметр заголовок окна - http://msdn2.microsoft.com/en-us/library/ms633499.aspx
Первый параметр - NULL, второй - что-то типа "343243: MetaTrader - Demo Account - [EURUSD,H1]"
Можно и так, только, опять-таки, нет связи между скриптом работающем в терминале и самим терминалом, если, например, их запущено несколько
"Криво" будет обрабатываться только ситуация с двумя терминалами, подключенными к одному счету.
Поиск по слову GetParent
//+------------------------------------------------------------------+ //| CloseTerminal.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| https://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" #property show_inputs #include <WinUser32.mqh> //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { int hwnd=WindowHandle(Symbol(),Period()); int hwnd_parent=0; //---- while(!IsStopped()) { hwnd=GetParent(hwnd); if(hwnd==0) break; hwnd_parent=hwnd; } if(hwnd_parent!=0) PostMessageA(hwnd_parent,WM_CLOSE,0,0); //---- return(0); } //+------------------------------------------------------------------+

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как правильно это сделать?