Как получить hwnd правильного окна графика, если у меня несколько окон с одинаковыми символом и периодом?
ewj:
int WindowHandle( string symbol, int timeframe)
возвращает hwnd только первого встречного ;(
Подскажите, а как мне добратся до остальных окон?
Спасибо.
Почему первого встречного? Того, в котором запущен скрипт с этим
выражением.int WindowHandle( string symbol, int timeframe)
возвращает hwnd только первого встречного ;(
Подскажите, а как мне добратся до остальных окон?
Спасибо.
А вот как передвигаться по окнам, освещается мало. Вверх - GetParent, а в целом по дереву - ума не хватает.
Если бы кто-нибудь подсказал, а лучше привел пример на mql, как "ходить" по окнам, например, с помощью EnumChildWindows, то было б здорово.
да-да.
Огроооомная просьба к знающим показать как использовать
BOOL EnumChildWindows(
HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);
Можно ли как то WNDENUMPROC lpEnumFunc на языке mql4 реализовать?
Или может быть есть какие то dll-ки которые можно из скрипта для этого попросить сделать вернуть нам список хендлов?
Как с помощью
WindowHandle(Symbol(),Period())
получить все хэндлы окон с одинаковым периодом и символом я не знаю. Был бы очень благодарен, если б кто нибудть объяснил\показал как .
Огроооомная просьба к знающим показать как использовать
BOOL EnumChildWindows(
HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);
Можно ли как то WNDENUMPROC lpEnumFunc на языке mql4 реализовать?
Или может быть есть какие то dll-ки которые можно из скрипта для этого попросить сделать вернуть нам список хендлов?
Почему первого встречного? Того, в котором запущен скрипт с этим
выражением.
Потому что я например вызываю действие из скрипта на м1 по евробаксу
для всех остальных ТФ евробакса, которых может быть несколько
для одного периода. Как с помощью
WindowHandle(Symbol(),Period())
получить все хэндлы окон с одинаковым периодом и символом я не знаю. Был бы очень благодарен, если б кто нибудть объяснил\показал как .
ewj:
Как с помощью
WindowHandle(Symbol(),Period())
получить все хэндлы окон с одинаковым периодом и символом я не знаю. Был бы очень благодарен, если б кто нибудть объяснил\показал как .
Никак.Как с помощью
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
);
да-да.
Огроооомная просьба к знающим показать как использовать
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 перекладывать неохота),
окон средствами mql стоит очень давно, поднимается с завидным постоянством и каждый раз глохнет из-за отсутствия решения.
Все опубликованные решения - наиболее простые частные случаи. Если у Вас есть возможность переложить код построения дерева и
перемещения по нему, сам Бог велел внести свой вклад в развитие чайников (и не только). Возможно, это тянет на библиотеку и статью.
Разве не обидно смотреть, как мы в десятке тем толчем воду в ступе, а разработчики не помогают принципиально, "чтобы не плодить хакеров".
Народная благодарность будет Вам обеспечена.
Код на C++
#define ID_FIRSTCHILD 100
#define ID_SECONDCHILD 101
#define ID_THIRDCHILD 102
..........................
А есть такое же, но с перламутровыми пуговицами (на mql)?
granit77 писал (а):
Jhonny, к Вам большая просьба выйти здесь за пределы заявленной темы, а рассмотреть вопрос шире.
Подумаем на досуге, однако сейчас с временем напряженка.
Jhonny, к Вам большая просьба выйти здесь за пределы заявленной темы, а рассмотреть вопрос шире.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
возвращает hwnd только первого встречного ;(
Подскажите, а как мне добратся до остальных окон?
Спасибо.