Как определить handle окна терминала?

 
Необходимо определить handle родительского окна терминала. Предполагается, что одновременно запущено несколько терминалов. Поэтому определить нужно handle именно того терминала, в котором запущен скрипт.
Как правильно это сделать?
 
NightPaul:

Необходимо определить handle родительского окна терминала. Предполагается, что одновременно запущено несколько терминалов. Поэтому определить нужно handle именно того терминала, в котором запущен скрипт.
Как правильно это сделать?

Я уже черт побери мучался с этой проблемой. Я бы рекомендовал по заголовку терминала определять окно.
 
Mike:

Я уже черт побери мучался с этой проблемой. Я бы рекомендовал по заголовку терминала определять окно.


Можно и так, но это не как не связывает скрипт, который работает в терминале и сам терминал, если, например, запущено несколько терминалов.

Я пробовал через WindowHandle() в скрипте получить дескриптор окна графика, а в dll-ке по нему найти родительское окно. Но результаты получались разные(!) для каждого графика. Попробовал также через дескриптор окна терминала найти дескрипторы дочерних окон, так вот, полученные дескрипторы отличались от тех, которые выдавала WindowHandle(). Такая вот проблемма.

 
Нужно "подняться" по иерархии окон на 3 родительских окна. Соответственно 3 вызова GetParent().
Я исследовал окна терминала утилитой Spy++.
Вот что она показала.
Файлы:
 

WinAPI функция FindWindow пробовали? Там можно задавать как параметр заголовок окна - http://msdn2.microsoft.com/en-us/library/ms633499.aspx

Первый параметр - NULL, второй - что-то типа "343243: MetaTrader - Demo Account - [EURUSD,H1]"

 
Itso:

WinAPI функция FindWindow пробовали? Там можно задавать как параметр заголовок окна - http://msdn2.microsoft.com/en-us/library/ms633499.aspx

Первый параметр - NULL, второй - что-то типа "343243: MetaTrader - Demo Account - [EURUSD,H1]"


Можно и так, только, опять-таки, нет связи между скриптом работающем в терминале и самим терминалом, если, например, их запущено несколько

Luptator:
Нужно "подняться" по иерархии окон на 3 родительских окна. Соответственно 3 вызова GetParent().

Все правильно. Совсем забыл про иерархию ) Спасибо большое!

 
NightPaul:
Itso:

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);
  }
//+------------------------------------------------------------------+
Причина обращения: