Как получить hwnd правильного окна графика, если у меня несколько окон с одинаковыми символом и периодом?

 
int WindowHandle( string symbol, int timeframe)

возвращает hwnd только первого встречного ;(
Подскажите, а как мне добратся до остальных окон?
Спасибо.
 
ewj:
int WindowHandle( string symbol, int timeframe)

возвращает hwnd только первого встречного ;(
Подскажите, а как мне добратся до остальных окон?
Спасибо.


Почему первого встречного? Того, в котором запущен скрипт с этим выражением.
А вот как передвигаться по окнам, освещается мало. Вверх - GetParent, а в целом по дереву - ума не хватает.
Если бы кто-нибудь подсказал, а лучше привел пример на mql, как "ходить" по окнам,  например, с помощью EnumChildWindows, то было б здорово.
 
да-да.
Огроооомная просьба к знающим показать как использовать

BOOL EnumChildWindows(
HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);

Можно ли как то WNDENUMPROC lpEnumFunc на языке mql4 реализовать?
Или может быть есть какие то dll-ки которые можно из скрипта для этого попросить сделать вернуть нам список хендлов?

Почему первого встречного? Того, в котором запущен скрипт с этим выражением.
Потому что я например вызываю действие из скрипта на м1 по евробаксу для всех остальных ТФ евробакса, которых может быть несколько для одного периода.
Как с помощью
WindowHandle(Symbol(),Period())
получить все хэндлы окон с одинаковым периодом и символом я не знаю. Был бы очень благодарен, если б кто нибудть объяснил\показал как .
 
ewj:

Как с помощью
WindowHandle(Symbol(),Period())
получить все хэндлы окон с одинаковым периодом и символом я не знаю. Был бы очень благодарен, если б кто нибудть объяснил\показал как .
Никак.
Постановка задача некорректная. WindowHandle может вернуть только хэндл окна, из которого запущен скрипт, а для того, чтобы узнать хэндлы
других окон "с одинаковым периодом и символом", их как-то надо идентифицировать, например, по запущенным в них программам. Иначе, даже если освоить  перебор всех окон снизу доверху, вглыбь и вширь, по какому признаку определить, что это именно то окно, которое ты ищешь?

P.S.
Есть знающие люди по API (Jhonny, Integer, Slawa, Renat, Quod Licet, и др.). но они либо заняты чемпионатом, либо проблема мелковата для их уровня, поэтому не обижайтесь на молчание.
А вопросов по API в mql накопилось море, от мелочей до серьезных.
 
Для WNDENUMPROC lpEnumFunc возможностей mql маловато. Такой подход требует серьёзных извратов, если вообще возможен.
 
Что интересно я хотел было ответить, гдето есть  у меня готовый пример кода на делфи как постоить дерево всех окон и их дочерних окон, для метатрейдера нормально все определяет(но на mql перекладывать неохота), но как сказал granit77 проблема в том чтобы отличить эти окна друг от друга, ведь класс и заголовок один и тотже.
У меня есть несколько другое решение, в каждое такое окно брость эксперт или индикатор (чтоб перезапуск на нас не влиял) который сохранит хендл своего окна в глобальные переменные(а имя переменной это эдентификатор который лично для вас характеризует это окно),  ну а дальше перебираете все глобальные переменные и смотрите где чего.

 
ewj:
да-да.
Огроооомная просьба к знающим показать как использовать

BOOL EnumChildWindows(
HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);


Код на C++

#define ID_FIRSTCHILD  100 
#define ID_SECONDCHILD 101 
#define ID_THIRDCHILD  102 
 
LONG APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    RECT rcClient; 
    int i; 
 
    switch(uMsg) 
    { 
        case WM_CREATE: // creating main window  
 
            // Create three invisible child windows. 
 
            for (i = 0; i < 3; i++) 
            { 
                CreateWindowEx(0, 
                               "ChildWClass", 
                               (LPCTSTR) NULL, 
                               WS_CHILD | WS_BORDER, 
                               0,0,0,0, 
                               hwnd, 
                               (HMENU) (int) (ID_FIRSTCHILD + i), 
                               hinst, 
                               NULL); 
            }
 
            return 0; 
 
        case WM_SIZE:   // main window changed size 
 
            // Get the dimensions of the main window's client 
            // area, and enumerate the child windows. Pass the 
            // dimensions to the child windows during enumeration. 
 
            GetClientRect(hwnd, &rcClient); 
            EnumChildWindows(hwnd, EnumChildProc, (LPARAM) &rcClient); 
            return 0; 
 
        // Process other messages. 
    } 
    return DefWindowProc(hwnd, uMsg, wParam, lParam); 
} 
 
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 
{ 
    LPRECT rcParent; 
    int i, idChild; 
 
    // Retrieve the child-window identifier. Use it to set the 
    // position of the child window. 
 
    idChild = GetWindowLong(hwndChild, GWL_ID); 
 
    if (idChild == ID_FIRSTCHILD) 
        i = 0; 
    else if (idChild == ID_SECONDCHILD) 
        i = 1; 
    else 
        i = 2; 
 
    // Size and position the child window.  
 
    rcParent = (LPRECT) lParam; 
    MoveWindow(hwndChild, 
               (rcParent->right / 3) * i, 
               0, 
               rcParent->right / 3, 
               rcParent->bottom, 
               TRUE); 
 
    // Make sure the child window is visible. 
 
    ShowWindow(hwndChild, SW_SHOW); 
 
    return TRUE;
}
 
Jhonny:
Что интересно я хотел было ответить, гдето есть  у меня готовый пример кода на делфи как постоить дерево всех окон и их дочерних окон, для метатрейдера нормально все определяет(но на mql перекладывать неохота),
Jhonny, к Вам большая просьба выйти здесь за пределы заявленной темы,  а рассмотреть вопрос шире. Вопрос простого перемещения по дереву 
окон средствами mql стоит очень давно, поднимается с завидным постоянством и каждый раз глохнет из-за отсутствия решения.  
Все опубликованные решения - наиболее простые частные случаи.   Если у Вас есть возможность переложить код построения дерева и 
перемещения по нему, сам Бог велел внести свой вклад в развитие чайников (и не только).  Возможно, это тянет на библиотеку и статью. 
Разве не обидно смотреть, как мы в десятке тем толчем воду в ступе,  а разработчики не помогают принципиально, "чтобы не плодить хакеров".
Народная благодарность будет Вам обеспечена. 
 

Код на C++

#define ID_FIRSTCHILD  100 
#define ID_SECONDCHILD 101
#define ID_THIRDCHILD 102
..........................

А есть такое же, но с перламутровыми пуговицами (на mql)?
 
granit77 писал (а):
Jhonny, к Вам большая просьба выйти здесь за пределы заявленной темы,  а рассмотреть вопрос шире. 
Подумаем на досуге, однако сейчас с временем напряженка.
 
скрипт
Файлы:
Причина обращения: