Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Повторяй сделки успешных трейдеров. Подпишись на сигнал!
MetaQuotes Software Corp.
Модератор
181004
MetaQuotes Software Corp. 2006.03.30 07:14 

Interception:

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

Author: Слава

MQL4 Comments
16319
MQL4 Comments 2006.03.30 11:27  
Полезная разработка !
Спасибо.
А можно узнать номер бара и цену, на которой случился клик мышкой :) ?
Avals
3182
Avals 2006.03.30 13:27  
Begun wrote:
Полезная разработка !
Спасибо.
А можно узнать номер бара и цену, на которой случился клик мышкой :) ?
Можно получить экранные координаты, координаты внутри окна, но это будут координаты в пикселях (x,y), а как их перевести в логические координаты - время/котировка я не знаю.
MQL4 Comments
16319
MQL4 Comments 2006.03.30 14:36  
А может уважаемые разработчики подскажут ?
Спасибо.
Comfest Kazan
114
Comfest Kazan 2006.04.02 19:12  
Уважаемый Слава!
А можно такую функцию добавить в Вашу разработку:
возвращать название активного окна без нажатия клавиши или мыши,
то есть в к5аждый момент времени знать какое окно активное.
Avals
3182
Avals 2006.04.03 05:29  
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="") { ////////////////// }
Slawa
Модератор
6830
Slawa 2006.04.07 15:07  
Avals wrote:
Begun wrote:
Полезная разработка !
Спасибо.
А можно узнать номер бара и цену, на которой случился клик мышкой :) ?
Можно получить экранные координаты, координаты внутри окна, но это будут координаты в пикселях (x,y), а как их перевести в логические координаты - время/котировка я не знаю.
Если известен размер окна в пикселях, тогда запросто можно воспользоваться функциями BarsPerWindow и FirstVisibleBar. Нет никаких проблем, чтобы вычислить номер бара.
Сложнее с координатой цены. Если масштаб - автоматический, то можно посчитать, прибавив по 5 процентов от разнициы между наибольшим и наименьшим значениями цен сверху и снизу. Если масштаб - фиксированный, то посчитать нельзя, так как отсутствует информация о верхней и нижней границе.
ANG3110
525
ANG3110 2006.05.02 16:17  

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

Уважаемый Avals!

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

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

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

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

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

MQL4 Comments
16319
MQL4 Comments 2006.10.18 22:03  
GeorgeU:

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

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

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