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

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

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

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

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


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

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

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

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

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

Pavel Chigirev
175
Pavel Chigirev  
Itso:

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

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


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

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

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

Andrey Khatimlianskii
58618
Andrey Khatimlianskii  
NightPaul:
Itso:

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

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

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

Имя окна состоит из № счета, символа и периода графика. Вся информация доступна из скрипта.
"Криво" будет обрабатываться только ситуация с двумя терминалами, подключенными к одному счету.
Slava
Модератор
13473
Slava  

Поиск по слову 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);
  }
//+------------------------------------------------------------------+
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий