Скачать MetaTrader 5

Скрипты: Interception

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
183593
MetaQuotes Software Corp.  

Interception:

Перехват в скрипте нажатия клавиш или мыши в окнах MetaTrader. Может понадобиться для написания управляемых пользователем действий.

Author: Слава

MQL4 Comments
16319
MQL4 Comments  
Полезная разработка !
Спасибо.
А можно узнать номер бара и цену, на которой случился клик мышкой :) ?
Avals
3183
Avals  
Begun wrote:
Полезная разработка !
Спасибо.
А можно узнать номер бара и цену, на которой случился клик мышкой :) ?
Можно получить экранные координаты, координаты внутри окна, но это будут координаты в пикселях (x,y), а как их перевести в логические координаты - время/котировка я не знаю.
MQL4 Comments
16319
MQL4 Comments  
А может уважаемые разработчики подскажут ?
Спасибо.
Comfest Kazan
114
Comfest Kazan  
Уважаемый Слава!
А можно такую функцию добавить в Вашу разработку:
возвращать название активного окна без нажатия клавиши или мыши,
то есть в к5аждый момент времени знать какое окно активное.
Avals
3183
Avals  
Referent wrote:
Уважаемый Слава!
А можно такую функцию добавить в Вашу разработку:
возвращать название активного окна без нажатия клавиши или мыши,
то есть в к5аждый момент времени знать какое окно активное.
Можно, но ничего добавлять не нужно - только изменить скрипт обработчик:

//+------------------------------------------------------------------+ //| shablon.mq4 | //| Viatcheslav Suvorov | //+------------------------------------------------------------------+ #property copyright "Viatcheslav Suvorov" #property show_inputs #include <WinUser32.mqh> #import "IdleLib.dll" int GetLastKeyWP(); int GetLastMouseWP(); int IdleLibInit(); int IdleLibUnInit(); string GetActiveWndName(); #import int start() { IdleLibInit();//инициализируем Dll для перехвата событий bool NeedLoop=true; string predwnd=''; while(NeedLoop){ // int lastkey=GetLastKeyWP();//Опрашиваем код посл. клавиши // int lastmouse=GetLastMouseWP();//Опрашиваем код мыши string lastwnd=GetActiveWndName();//Имя окна Metatrader где произошло событие if ((predwnd!=lastwnd) && lastwnd!="") { Print("Активное окно ",lastwnd); predwnd=lastwnd; } else { // Print("Активное окно ",predwnd); //активное окно не изменилось } Sleep(100); }//while return(0); } void deinit() { IdleLibUnInit(); }

Будет выодить имя окна когда изменилось активное. В блок
} else { // Print("Активное окно ",predwnd); //активное окно не изменилось }

можно добавить обработку если активное окно осталось тем же. Т.е. в любой момент имеем имя окна.
Можно так же добавить обработку случая когда не одно окно MetaTrader не имеет фокуса (т.е. пользователь переключился на другое приложение):
if (lastwnd="") { ////////////////// }
Slava
Модератор
6924
Slava  
Avals wrote:
Begun wrote:
Полезная разработка !
Спасибо.
А можно узнать номер бара и цену, на которой случился клик мышкой :) ?
Можно получить экранные координаты, координаты внутри окна, но это будут координаты в пикселях (x,y), а как их перевести в логические координаты - время/котировка я не знаю.
Если известен размер окна в пикселях, тогда запросто можно воспользоваться функциями BarsPerWindow и FirstVisibleBar. Нет никаких проблем, чтобы вычислить номер бара.
Сложнее с координатой цены. Если масштаб - автоматический, то можно посчитать, прибавив по 5 процентов от разнициы между наибольшим и наименьшим значениями цен сверху и снизу. Если масштаб - фиксированный, то посчитать нельзя, так как отсутствует информация о верхней и нижней границе.
ANG3110
556
ANG3110  

Очень хорошая и полезная идея!

Уважаемый Avals!

У меня к Вам такой вопрос. А можно ли сделать обратную эмуляцию команды. Вот например я нахожусь в окне графика любой валютной пары, и нажимаю правую кнопку. Открывается окно, Ваш shablon показывает код мыши 517, затем я жму на надпись "Обновить" - shablon выдает код 513. Мне нужно сделать так, чтобы когда я мышкой передвигаю Object помещенный на конце индикатора - в этот момент эмулировалась бы команда "Обновить" код 513.

Или более обще, если я знаю код, то можно ли его допустим из скрипта запустить на выполнение, при определенном условии не нажимая мышкой или клавишей.

Заранее благодарю за ответ. Если это выходит за рамки обсуждения данной темы, то ответить можно на адресс ANG3110@latchess.com .

MQL4 Comments
16319
MQL4 Comments  
тут глючок небольшой имеется... железно зашито в dll имя окна метатрейдера :/
а если программа называется как-нибудь по-другому, то getactiveWndname ни чего не возвращает... и ни как не узнать :(
George
16
George  

Здравствуйте Слава! А что делать, всё таки, если платформа называется не Метатрейдер, а Телетрейдер? Библиотека dll к сож. не работает. ... не распознает. Посоветуете?

MQL4 Comments
16319
MQL4 Comments  
GeorgeU:

Здравствуйте Слава! А что делать, всё таки, если платформа называется не Метатрейдер, а Телетрейдер? Библиотека dll к сож. не работает. ... не распознает. Посоветуете?

скопировать файл C:Program FilesMetaTrader 4profilesconfiguration.ini от "правильного" МТ в
C:Program FilesTeletrader 4profilesconfiguration.ini

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