Нужно добавить, что теоретически если и есть вариант через окно, то не знаю как в MQL получить адрес функции для обработки событий окна.
Если научится получать адрес функции, то возможно будут доступны как создание окон, так и прицепы хуков к существующим.
Речь идет о виндовых DLL. Написание своей пока что не рассматривается.
Знатоки, что посоветуете?
Не знаток виндовых DLL, но посоветую: обратиться в сервисдеск от лица всех страждущих mql-программеров и попросить таки сделать профессиональную обработку всех событий мышки, включая правый батон и колесо. Весь входной событийный поток должон обрабатываться в mql. Низя ж по любому поводу DLL вызывать. Кагбэ противоречит политике партии.
А моя б воля... я б вообще предпочёл разделить события графика и клавиатуры/мыши.
Т.е. добавить input-событие, например, OnInput(KeybStruct, MouseStruct) с полностью заполненными полями состояния клавиатуры и мыши на момент срабатывания. Щёб ни один нажатый шифт при мышином скроллинге не терялся в неизвестности.
В текущей ситуации, когда этого разделения нет, вроде как нужны функции возвращающие состояние мыши и клавиатуры по запросу + доделать обработку всех баттонов и колеса в OnChartEvent.
- www.mql5.com
Не знаток виндовых DLL, но посоветую: обратиться в сервисдеск от лица всех страждущих mql-программеров и попросить таки сделать профессиональную обработку всех событий мышки, включая правый батон и колесо. Весь входной событийный поток должон обрабатываться в mql. Низя ж по любому поводу DLL вызывать. Кагбэ противоречит политике партии.
А моя б воля... я б вообще предпочёл разделить события графика и клавиатуры/мыши.
Т.е. добавить input-событие, например, OnInput(KeybStruct, MouseStruct) с полностью заполненными полями состояния клавиатуры и мыши на момент срабатывания. Щёб ни один нажатый шифт при мышином скроллинге не терялся в неизвестности.
В текущей ситуации, когда этого разделения нет, вроде как нужны функции возвращающие состояние мыши и клавиатуры по запросу + доделать обработку всех баттонов и колеса в OnChartEvent.
Собстно говоря , получение события от буттона, как клавы, так и мыши , не представляет трудностей, так как они физически представлены в системе. Вот прокрутка - это другое дело.
MetaDriver:
Нужны CHART_EVENT_MOUSE_WHEEL (или аналог) и обработка правого+среднего батонов. Я понимаю, что проще их зарезервировать за самим чартом и "воспретить/не пущать", однако должны ж юзеры получить таки профессиональные GUI mql-программ? На очереди - локальные пользовательские mql-меню.. :)
Кроме того хотелось бы иметь функции проверки состояния батонов мыши и шифтов/альтов на клавиатуре на лету из любого места программы.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
После штудирования инета определился с тремя возможностями:
1. Обработка WM_MOUSEWHEEL
2. Обработка WM_INPUT
3. Получение данных мышки из DirectInput.
В первом варианте предполагается наличие окна, где это событие обрабатывается. К сожалению не знаю как добраться к очереди сообщений окна терминала из MQL, поэтому этот вариант отпал. http://www.rsdn.ru/article/baseserv/hookdll.xml
Второй вариант тоже предполагает окно, но была надежда, что обращаясь к функции GetRawInputBuffer, смогу получить данные, минуя терминал.
У меня получилось воспользоваться всеми функциями регистрации и получения информации. А именно:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices
Но функция GetRawInputBuffer, которая нужна, не заработала. Буфер пуст, данные в него не захватываются.
С третьим вариантом к сожалению тоже не получилось, так как не знаю как получить экземпляр интерфейса LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8.
Знатоки, что посоветуете?