как програмно(MQL) определить активное окно инструмента?

 

как програмно(MQL) определить активное окно инструмента?

если к примеру активно окно евро/дол то на вопрос советника(который присоеденён к дол/франк) какой инструмент активен,

получаем ответ "EURUSD" !?

 
 
уточняю! советник подсоеденён к примеру к дол/франк !?
 

уточняю:

 

проверил ещё раз! но Symbol() выдаёт USDCHF (инструмент к которому присоеденён советник) хотя активное окно EURUSD !

вопрос открыт!(

 
KimIV писал(а) >>

уточняю:

Не об этом вопрос. Это опять вопрос о входящей нынче в моду сумсшедшей автоматизаци. Эксперт дожен знать на какой график юзверь пялится.

 
и что молчим?

вопрос открыт!(

 

Какой вы настойчивый :-)

.

Итак.

Есть функция, EnumChildWindows. Использовать ее из mql нельзя,

т.к. параметром функции является указатель на функцию.

.

Начинаете искать от окошка десктопа (NULL). Находите окошко МетаТрейдера.

Чтобы зацепить именно то окошко, какое надо, можно попользоваться GetWindowThreadProcessId.

Посылаете окошку метатрейдера сообщение WM_MDIGETACTIVE.

Если я не ошибаюсь, модальные окошки не ложатся в MDI.

Оно дает вам активный график.

.

Дальше - все элементарно. Осталось достать title окошка.

Строчечки между процессами не прокидываются, но вам повезло! :-)

Значит, не надо вешать keyboard hook / делать code inject.

Ваша dll будет в том же процессе, что метатрейдер.

Тупо зовем GetWindowText и сплитим строчку "EURUSD,H1" по запятой.

 
      GlobalVariableSet(Symbol(),WindowHandle(Symbol(),NULL));
 

Можно сунуть строчку christmas'а в скрипт -

и когда открываете новый график - кидайте этот скрипт на новое окно.

А советник пусть ищет переменные с именем символов.

Найдет - а там виндовый хэндл окошка! 8-)

 
jartmailru >>:

Можно сунуть строчку christmas'а в скрипт -

и когда открываете новый график - кидайте этот скрипт на новое окно.

А советник пусть ищет переменные с именем символов.

Найдет - а там виндовый хэндл окошка! 8-)

эту строчку можно поместить в индикатор

а в советнике можно например сделать функцию закачки котировок по разным ТФ

//+------------------------------------------------------------------+
void UpLoad()
{
   string TimeFrames[]={"10080","1440","240","60","15","5"};
   for (int TF=0; TF<6; TF++)
      for (int win=0; win<GlobalVariablesTotal(); win++)   {
         int hwnd = GlobalVariableGet(GlobalVariableName(win));
         hwnd = GetDlgItem(hwnd, 0x45A);
         SetWindowTextA(hwnd, TimeFrames[TF]);
         PostMessageA(hwnd, WM_KEYDOWN, VK_RETURN, 0);
         PostMessageA(hwnd, WM_COMMAND, 33324, 0); Sleep(500);
         PostMessageA(hwnd, WM_COMMAND, 33324, 0); Sleep(500);   }
}
//+------------------------------------------------------------------+
Причина обращения: