Кнопка на графике для запуска скрипта.

 

Добрый день!

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

В наличии имеется советник, который выводит на график кнопку BUTTON при нажатии на которую появляется

графический объект в виде прямоугольника : 

 

Также имеется часть кода для вставки в код советника, который "нажимает" сочетание клавиш Ctrl+буква или Alt+буква. С настройками по умолчанию нажимается Ctrl+T.

#import "user32.dll"
// Функция keybd_event синтезирует нажатие клавиши. Система может использовать такое синтезируемое нажатие клавиши, чтобы создать сообщение WM_KEYUP или WM_KEYDOWN.
// Вызывает функцию keybd_event программа обработки прерываний драйвера клавиатуры.
void     keybd_event(int bVk,          // Определяет код виртуальной клавиши. Код должен быть значением в диапазоне от 1 до 254.
                      int bScan,        // Этот параметр не используется (Scan = 0x45).
                      int dwFlags,      // Определяет различные виды операций функции. Этот параметр может состоять из одного или нескольких ниже следующих  значений.
                                        // KEYEVENTF_EXTENDEDKEY    - Если он установлен, скэн-коду предшествует префиксный байт, имеющий значение 0xE0 (224).
                                        // KEYEVENTF_KEYUP          - Если он установлен, клавиша была отпущена. Если не установлен, клавиша была нажата.
                      int dwExtraInfo); // Определяет дополнительное значение, связанное с нажатием клавиши.
                                        // Моделируем нажатие клавиши:                        keybd_event (VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY|0, 0);
                                        // Моделируем возврат клавиши в не нажатое состояние: keybd_event (VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);
#import

#define PAUSE 10
#define VK_MENU 0x12 //ALT key
#define VK_CONTROL 0x11 //CTRL key

#property show_inputs
extern   int     CtrlAlt=0;   // Первая клавиша: 0 - Ctrl, 1 - Alt
extern   string  Key="T";     // Вторая клавиша

void start() {
    int FirstKey=VK_CONTROL;
    if(CtrlAlt==1)FirstKey=VK_MENU;
    int SecondKey=StringGetChar(Key,0);
    keybd_event(FirstKey,0,0,0);
    Sleep(PAUSE);
    keybd_event(SecondKey,0,0,0);
    Sleep(PAUSE);
    keybd_event(SecondKey,0,2,0);
    Sleep(PAUSE);
    keybd_event(FirstKey,0,2,0);
}

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

Советник прикрепил.

Буду признателен за конструктив и помощь в решении задачки.

Спасибо.

Файлы:
 
Актуально.
 

Не нужно виртуально нажимать никаких клавиш. Просто пропишите в обработчик нажатия кнопки вызов соответствующего скрипта через API:

#define MT4_MESSAGE "MetaTrader4_Internal_Message"
#define TA_SCRIPT_NAME "<имя скрипта>"

#import "user32.dll"
  int RegisterWindowMessageA(uchar &lParam[]);
  int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
#import

...
// Тело обработчика нажатой кнопки
    char buf[];
    StringToCharArray(MT4_MESSAGE, buf);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    StringToCharArray(TA_SCRIPT_NAME, buf);
    
    int hwnd = WindowHandle("<символ>", <таймфрейм>);
    if (hwnd < 0)
    {
      Alert("Заданное окно для запуска скрипта не найдено.");
      return;
    }
    
    SendMessageA(hwnd, MT4InternalMsg, 16, buf);       

 И всего то... 

 

 Я не силен в программировании, к сожалению.

Не могли бы подсказать, куда нужно вставить ваш код?

 
Актуально.
 

Ihor Herasko , куда же вы пропали?

Не бросайте, помогите пожалуйста, ели можете.

Спасибо. 

 
Alligator:

 Я не силен в программировании, к сожалению.

Не могли бы подсказать, куда нужно вставить ваш код?

Вот код советника с кнопкой :

 

На этом форуме помогают советами. То есть указывают направление поисков для решения той или иной проблемы. А вот сделать за кого-то полную работу - это неправильно, т. к. не дает никакой пользы для обратившегося за помощью. Сделать за Вас - это во  Фриланс. Там оформят все в лучшем виде.
 

Понял. Спасибо.

Когда-то и здесь помогали. Сейчас видимо все стали крутыми прогерами, за менее чем 100 баксов и слушать не станут. ))) 

 
Alligator:

Понял. Спасибо.

Когда-то и здесь помогали. Сейчас видимо все стали крутыми прогерами, за менее чем 100 баксов и слушать не станут. ))) 

А может быть раньше мерились *** а теперь стало лениво...
 
Alligator:

Понял. Спасибо.

Когда-то и здесь помогали. Сейчас видимо все стали крутыми прогерами, за менее чем 100 баксов и слушать не станут. ))) 

Здесь и продолжают помогать. 

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

Так что тут только два выхода:

1) Поднапрячься, выучив хотя бы азы MQL4. Тогда все для решения Вашего вопроса уже есть. Затраченные Вами усилия на обучение как раз и приведут к пониманию ценности обретенного.

2) Оформить эту задачу как заказ во Фрилансе. На это Вы потратите свои денежные средства, которые уже цените, т. к. получили их, заработав в другой сфере деятельности. Итог - конечный продукт Вы цените как продукт своего труда.

 

Я так понимаю что в вашем понимании бабушку через дорогу перевёл и пусть она заплатит, оценит так сказать ваш труд, )) 

не позволив усомниться что  она не оценила ваши титанические усилия.

Ваша философия понятна, дальше можно не дискутировать. ))

Удачи!