вопрос относящийся к функции GetAncestor библиотеки user32.dll

 
имею следующий скрипт переинициализации индикаторов InitAllIndicators.mq4 - бросив его на график он вызывает окно "Список индикаторов" >> потом вызывает окно свойств индикатора >> нажимает кнопку "ОК" >> и закрывает.

 встала задача изменить работу скрипта так: что бы он делал тоже самое, но при условие что его бросаешь не на тот график где он должен отработать, а скажем на другой перед ним открытый(другого ТФ).

 вызов окна осуществляется импортом функции: 
   int GetAncestor(int hWnd, int gaFlags);
   #define GA_ROOT 2  
  //---------получаем дескриптор основного окна терминала с помощью MQL ф-ции WindowHandle()
hParentWnd = GetAncestor(WindowHandle(Symbol(),Period()),GA_ROOT);

  на вид задача решалась уточнением: hParentWnd = WindowHandle(Symbol(),PERIOD_M1); но с таким вариантом я кидаю скрипт на М5 с задачей сделать переиниц-цию на М1. он вызывает окно "Список индикаторов" >> потом вызывает окно свойств индикатора >> и все дальнейшие действия не совершает.


 прошу помощи. пользователь SeriousRacoon уже предложил: "- Вам нужно переключиться на график, окно списка индикаторов для которого вы вызываете."

 -как это грамотно сделать, если верна подсказка(какой функциейAPI)?


Файлы:
 

MT держит окна графиков в MDI-интерфейсе. Нужно отправить окну с классом "MDI Client" сообщение WM_MDIACTIVATE

В качестве параметра выступает хендл окна клиента. WindowHandle возвращает либо его, либо дочернее, которое и содержит график (т.е. если так, от него нужно взять родительское).

Spy++ поможет.


 
SeriousRacoon:

MT держит окна графиков в MDI-интерфейсе. Нужно отправить окну с классом "MDI Client" сообщение WM_MDIACTIVATE

В качестве параметра выступает хендл окна клиента. WindowHandle возвращает либо его, либо дочернее, которое и содержит график (т.е. если так, от него нужно взять родительское).

Spy++ поможет.


 ну, хшоро получил я хендл окна. а дальнейшие действия?
 
ar4bal:
 ну, хшоро получил я хендл окна. а дальнейшие действия?

Теперь нужно найти хендл окна с классом "MDIClient" (обведён красным) и отправить ему сообщение WM_MDIACTIVATE с параметром окна, содержащего график (одно из дочерних окон этого MDIClient).