Добрый день! Подскажите, как получить дескриптор окна вызвавшего DLL Метатрейдера из этой DLL (C++)?
Без передачи из MQL4 дескриптора функцией WindowHandle, возможно ли получение дескриптора именно того окна МТ, из которого была вызвана DLL?
Спасибо за ответы.
Нет такой возможности. Только, если передавать, как параметр в функцию DLL.
А есть ли возможность получить этот дескриптор из MQL4 для передачи в DLL кроме как с помощью функции WindowHandle (т.е. в случае запуска из тестера без визуализации)?
А есть ли возможность получить этот дескриптор из MQL4 для передачи в DLL кроме как с помощью функции WindowHandle (т.е. в случае запуска из тестера без визуализации)?
По заголовку окна только. И то, если такое окно одно. Будет несколько, то получишь дескриптор активного окна, если оно активно, или самого верхнего в Z-последовательности.
Библиотека. В ней есть решение для этого.
Раздел "4.2. Функции для работы с окном графика".
Вы сами это можете сделать в DLL.
Ты не можешь получить хэндл окна, которого нет.
дескриптор окна вызвавшего DLL Метатрейдера
получение его с помощью функции WindowHandle предполагает определение родителя окна графика.
дескриптор окна вызвавшего DLL Метатрейдера
получение его с помощью функции WindowHandle предполагает определение родителя окна графика.
А, так если тебе нужно получить окно самого МТ4, то нет проблем. Ищешь окно, чей Process Id совпадает с CurrentProcessId
Спасибо за совет. Не могли бы вы перечислить соответствующие функции WinAPI.
Спасибо за совет. Не могли бы вы перечислить соответствующие функции WinAPI.
FindWindow и GetWindowProcessId
Не нашел GetWindowProcessId, зато нашел
DWORD WINAPI GetWindowThreadProcessId(
_In_ HWND hWnd,
_Out_opt_ LPDWORD lpdwProcessId
);
Наверное это она?
И вторая функция
DWORD WINAPI GetCurrentProcessId(void);
Т.е. как я понял, нужно делать перечисление окон с помощью EnumWindows, для каждого окна вызывать GetWindowThreadProcessId и сравнивать его с GetCurrentProcessId, пока не обнаружится совпадение.
ну да, можно через EnumWindows.
И кстати, помимо Id нужно проверять так же класс окна. У главного окна МТ4 там свой класс. А иначе можно получить например хэндл окна ордера или ещё какое-то диалоговое окно МТ, находящееся в корневом уровне
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день! Подскажите, как получить дескриптор окна вызвавшего DLL Метатрейдера из этой DLL (C++)?
Без передачи из MQL4 дескриптора функцией WindowHandle, возможно ли получение дескриптора именно того окна МТ, из которого была вызвана DLL?
Спасибо за ответы.