Программирование функциональных кнопок

 
Как запрограммировать физическую кнопку компьютера на выполнение в советнике?
 
//+---------------------------------------------------+
//| Скрипт для фиксации нажатия кнопки   -С-Проба.mq4 |
//+---------------------------------------------------+
void OnStart()
{
  GlobalVariableSet("Кнопка",1);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  if(!GlobalVariableCheck("Кнопка"))return;
  int Кнопка=int(GlobalVariableGet("Кнопка"));
  if(Кнопка==1)Alert("Нажата первая кнопка");
  if(Кнопка==2)Alert("Нажата ВТОРАЯ кнопка");
  GlobalVariableSet("Кнопка",0);
}

На скрипт назначил клавишу CTRL-A. При ее нажатии получаю:

Далее пишем еще скрипты по одному на каждую клавишу.

Или делаем кнопки в советнике и нажимаем мышью. Тут еще демонстрируется, что любое число, отличное от нуля, это true;  А ноль это false

//+------------------------------------------------------------------+
//| Создается кнопку Выход и демонстрируется что надо.  Э-Демо-1.mq4 |
//+------------------------------------------------------------------+
#property strict
bool Результат;

//+------------------------------------------------------------------+
//| Инициализация                                                    |
//+------------------------------------------------------------------+
int OnInit()
{
   int Счетчик;
   string Текст="Демонстрация истинности и ложности числового выражения\n\n";

//--- Кнопка Выход
   ObjectCreate(0,"Exit",OBJ_BUTTON,0,0,0);           // Создать кнопку
   ObjectSetInteger(0,"Exit",OBJPROP_CORNER,CORNER_RIGHT_UPPER); // Правый верхний угол
   ObjectSetInteger(0,"Exit",OBJPROP_XDISTANCE,85);   // Расстояние от (правого) края окна
   ObjectSetInteger(0,"Exit",OBJPROP_YDISTANCE,52);   // Расстояние по высоте от (верха окна) 
   ObjectSetInteger(0,"Exit",OBJPROP_XSIZE,80);       // Размер по ширине
   ObjectSetInteger(0,"Exit",OBJPROP_YSIZE,25);       // Размер по высоте
   ObjectSetString (0,"Exit",OBJPROP_TEXT,"Выход");    // Надпись
   ObjectSetInteger(0,"Exit",OBJPROP_COLOR,White);    // Цвет надписи
   ObjectSetInteger(0,"Exit",OBJPROP_BGCOLOR,Green);  // Цвет фона
   ObjectSetInteger(0,"Exit",OBJPROP_BORDER_COLOR,Yellow); // Цвет рамки
   ObjectSetInteger(0,"Exit",OBJPROP_HIDDEN,false);   // Не прятать в списке объектов
   ObjectSetInteger(0,"Exit",OBJPROP_STATE,false);    // Ненажатое состояние
   ObjectSetInteger(0,"Exit",OBJPROP_FONTSIZE,12);    // Размер шрифта

   for(Счетчик=-2; Счетчик<=2; Счетчик++)
   {
     Текст+="Число  =  "+string(Счетчик);
     if(Счетчик)Текст+="  -->  Истина = true\n";
     else       Текст+="  -->  Ложь = false\n"; 
   }

   // Вывод информации
   MessageBox(Текст, "Числовое выражение", MB_ICONINFORMATION);
   return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  if(!GlobalVariableCheck("Кнопка"))return;
  int Кнопка=int(GlobalVariableGet("Кнопка"));
  if(Кнопка==1)Alert("Нажата первая кнопка");
  if(Кнопка==2)Alert("Нажата ВТОРАЯ кнопка");
  GlobalVariableSet("Кнопка",0);
}


//+------------------------------------------------------------------+
//| Реакция на события                                               |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &ИмяКнопки)
{
  if(ИмяКнопки=="Exit")
  {
    ObjectSetInteger(0,"Exit",OBJPROP_STATE,false);
    ObjectSetInteger(0,"Exit",OBJPROP_BGCOLOR,Yellow);
    ObjectSetString(0,"Exit",OBJPROP_TEXT,"Ухожу");
    ObjectSetInteger(0,"Exit",OBJPROP_COLOR,Black);
    ObjectSetInteger(0,"Exit",OBJPROP_BORDER_COLOR,Red);
    WindowRedraw();    // Перерисовать окно
    Sleep(555);        // Пауза 0,555 секунды
    ObjectDelete("Exit");
    ExpertRemove();
  }
}


//+---------------------------------------------------------+
//| Деинициализация эксперта                                |
//| Вывод сообщения о причине                               |
//+---------------------------------------------------------+
void OnDeinit(const int НомерПричины)
{
  string Причина="";
  switch (НомерПричины)
  {
    case 0: Причина=" Вызвана функция ExpertRemove()"; break;
    case 1: Причина=" Удаление";                       break;
    case 2: Причина=" Перекомпиляция";                 break;
    case 3: Причина=" Смена таймфрейма или символа";   break;
    case 4: Причина=" График закрыт";                  break;
    case 5: Причина=" Изменение параметров";           break;
    case 6: Причина=" Смена счета или настроек";       break;
    case 7: Причина=" Смена шаблона графика";          break;
    case 8: Причина=" Ошибка в OnInit()";              break;
    case 9: Причина=" Терминал закрыт";                break;
  }
   Alert(StringSubstr(__FILE__,0,StringLen(__FILE__)-4),"  ",
         Symbol(), " --> ", НомерПричины,". ", Причина);
}
Файлы:
demo-1.mq4  5 kb