Что скажут профи: Как получить значения скрола мышки в MQL?

 
Речь идет о виндовых DLL. Написание своей пока что не рассматривается.


После штудирования инета определился с тремя возможностями:

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.


Знатоки, что посоветуете?

Taking Advantage of High-Definition Mouse Movement (Windows)
  • msdn.microsoft.com
A standard computer mouse returns data at 400 dots per inch (DPI), whereas a high-definition mouse generates data at 800 DPI or greater. This makes input from a high-definition mouse much more precise than that from a standard mouse. However, high-definition data cannot be obtained through the standard WM_MOUSEMOVE messages. In general, games...
 
:(
 

Нужно добавить, что теоретически если и есть вариант через окно, то не знаю как в MQL получить адрес функции для обработки событий окна.

Если научится получать адрес функции, то возможно будут доступны как создание окон, так и прицепы хуков к существующим.

 
sergeev:
Речь идет о виндовых DLL. Написание своей пока что не рассматривается.

Знатоки, что посоветуете?

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

А моя б воля... я б вообще предпочёл разделить события графика и клавиатуры/мыши. 

Т.е. добавить input-событие, например, OnInput(KeybStruct, MouseStruct) с полностью заполненными полями состояния клавиатуры и мыши на момент срабатывания. Щёб ни один нажатый шифт при мышином скроллинге не терялся в неизвестности.

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

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
MetaDriver:

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

А моя б воля... я б вообще предпочёл разделить события графика и клавиатуры/мыши. 

Т.е. добавить input-событие, например, OnInput(KeybStruct, MouseStruct) с полностью заполненными полями состояния клавиатуры и мыши на момент срабатывания. Щёб ни один нажатый шифт при мышином скроллинге не терялся в неизвестности.

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

   Собстно говоря , получение события от буттона, как клавы, так и мыши , не представляет трудностей, так как они физически представлены в системе. Вот прокрутка - это другое дело.
 
FAQ:
   Собстно говоря , получение события от буттона, как клавы, так и мыши , не представляет трудностей, так как они физически представлены в системе. Вот прокрутка - это другое дело.

MetaDriver:

........... + доделать обработку всех баттонов и колеса в OnChartEvent.

Нужны  CHART_EVENT_MOUSE_WHEEL (или аналог) и  обработка правого+среднего батонов. Я понимаю, что проще их зарезервировать за самим чартом и "воспретить/не пущать", однако должны ж юзеры получить таки профессиональные GUI mql-программ?  На очереди - локальные пользовательские mql-меню.. :)

Кроме того хотелось бы иметь функции проверки состояния батонов мыши и шифтов/альтов на клавиатуре на лету из любого места программы.