Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подними скорость в сети MQL5 Cloud Network. Установи Strategy Tester Agent!
Рустам
3597
Рустам 2012.04.29 18:09 
Речь идет о виндовых 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.


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


Присоединяюсь к вопросу.
Ihor Herasko
8896
Ihor Herasko 2012.04.29 18:44  

Сначала бы неплохо определиться, в каком именно виде необходимо получение об информации о возникновении события: напрямую или опосредовано?

Если исходить из того, что написание собственной DLL не рассматривается, то может тогда и от API отказаться? Если косвенный способ подходит, то:

Вешаем на график зацикленный скрипт, который проверяет индекс первого видимого бара в окне - WindowFirstVisibleBar (можно вместе с количеством баров в окне - WindowBarsPerChart). Если отличаются от предыдущего значения, то совершались действия с графиком. Правда, в этом случае не только колесико мыши могло быть причиной (изменение масштаба по времени - "+", "-", нажатие Home или End, прямой переход к нужной дате).

В любом случае, пока мало информации для того, чтобы понять, что именно требуется от определения события кручения колесика мыши. Тогда можно и методы подсказать.

P.S. Ну а если нужен доступ к функции обработки окна, то это SetWindowLongPtr (см. msdn). Но без DLL тут не обойтись, т.к. нельзя назначить новую процедуру обработки сообщений, расположенную в MQL-коде.

Рустам
3597
Рустам 2012.04.29 19:13  

Мысль контролировать скроллинг чарта, была. Но не комильфо....

Нет, нужно определить событие прокрутки колеса.

o_O
Модератор
23617
o_O 2012.04.29 19:29  
Scriptong:

В любом случае, пока мало информации для того, чтобы понять, что именно требуется от определения события кручения колесика мыши. Тогда можно и методы подсказать.


что именно требуется?

список крутить конечно. что же еще? :)

o_O
Модератор
23617
o_O 2012.04.29 21:11  

нет. там хук. в MQL незнамо как адрес функции получить.
Андрей
1890
Андрей 2012.04.29 23:29  
На окно терминала вешать кастомную процедуру обработки событий с перехватом- и всё.
Я у себя так сделал:
- пользователь кликает закрыть окно МТ
- я спрашиваю: вы поменяли индикатор- сохранить? Да Нет Отмена
При отмене никто никуда не выходит.
Да- сохраняем и выходим, нет- не сохраняем и выходим.
Примитивно.

Хуки тут ни при чём, правда.

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

Успехов...
o_O
Модератор
23617
o_O 2012.04.30 07:50  
jartmailru:
На окно терминала вешать кастомную процедуру обработки событий с перехватом- и всё.

то есть речь про SetWindowLong ?
Андрей
1890
Андрей 2012.04.30 09:01  
sergeev:
то есть речь про SetWindowLong ?
Да.
Ihor Herasko
8896
Ihor Herasko 2012.04.30 19:40  
sergeev:

что именно требуется?

список крутить конечно. что же еще? :)


Если список (CListCtrl) - свой объект, то в чем проблема? События от мыши получает именно список, а не окно Meta Trader.

Или речь идет о списке, составленном на основе графических объектов MT4?

Алексей Тарабанов
7250
Алексей Тарабанов 2012.04.30 19:57  
Scriptong:


Если список (CListCtrl) - свой объект, то в чем проблема? События от мыши получает именно список, а не окно Meta Trader.

Или речь идет о списке, составленном на основе графических объектов MT4?


Если нет проблемы - укажите, пожалуйста, как определить ФАКТ смещения колесика на мышке. Когда указатель оной мышки находится в окошке MT4. А то очень интересненько :)

Само собою,- средствами Windows.

/ /123456
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий