TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) не работает.

 
Почему функция TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) всегда возвращает 0 независимо от состояния клавиши Esc?
 
void OnStart()
{
  while (!IsStopped())
  {
    if (TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE))
      Alert("Escape");
      
    Sleep(100);
  }
}
 
Уточнение: функция вызывается в событии OnChartEvent индикатора при проверке на CHARTEVENT_KEYDOWN, нажата ли клавиша Esc при нажатии на другую клавишу.
 
Ivan Titov #:
Уточнение: функция вызывается в событии OnChartEvent индикатора при проверке на CHARTEVENT_KEYDOWN, нажата ли клавиша Esc при нажатии на другую клавишу.

С клавишами работаю через велосипед, поэтому просто скопировал код.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Keyboard

fxsaber, 2024.02.27 14:01

Срабатывание по заданной комбинации клавиш.

#property indicator_chart_window
#property indicator_plots 0

#include <fxsaber\Keyboard\Keyboard.mqh> // https://www.mql5.com/ru/code/48393

input ENUM_KEYCODE inKeyCode = KEYCODE_KEY_A; // По какой клавише срабатывание

input group "Какие клавиши должны быть дополнительно нажаты/включены"
input ENUM_KEYSTATE inKeyStateEnable1 = KEYSTATE_NONE;
input ENUM_KEYSTATE inKeyStateEnable2 = KEYSTATE_NONE;
input ENUM_KEYSTATE inKeyStateEnable3 = KEYSTATE_NONE;

input group "Какие клавиши НЕ должны быть нажаты/включены"
input ENUM_KEYSTATE inKeyStateDisable1 = KEYSTATE_NONE;
input ENUM_KEYSTATE inKeyStateDisable2 = KEYSTATE_NONE;
input ENUM_KEYSTATE inKeyStateDisable3 = KEYSTATE_NONE;

void OnChartEvent( const int id, const long &lparam, const double&, const string& )
{
  if ((id == CHARTEVENT_KEYDOWN) &&
      (lparam == inKeyCode) &&
      KEYBOARD::KeysState(inKeyStateEnable1 | inKeyStateEnable2 | inKeyStateEnable3,
                          inKeyStateDisable1 | inKeyStateDisable2 | inKeyStateDisable3))
    Alert(KEYBOARD::Pressed(lparam));
}

int OnCalculate ( const int rates_total, const int, const int, const double &[] )
{   
  return(rates_total);
}


Срабатывает комбинация в индикаторе.

Alert: ESCAPE+KEYCODE_KEY_A


Как минимум, на моей машине работает.

 
fxsaber #:
С клавишами работаю через велосипед

Печально, что в очередной раз не обойтись без самодельного велосипеда в MQL4 из-за неработающего штатного. Библиотека не для MQL4 кстати.

 
fxsaber #:
  while (!IsStopped())   {     if (TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE))       Alert("Escape");            Sleep(100);   }

И скрипт не работает. Видимо константу TERMINAL_KEYSTATE_ESCAPE надо исключить из документации MQL4.

 
Ivan Titov #:

Библиотека не для MQL4 кстати.

Кроссплатформенная.

'Accelerator.mq4'       Accelerator.mq4 1       1
'Keyboard.mqh'  Keyboard.mqh    1       1
'LanguageID.mqh'        LanguageID.mqh  1       1
'KeyCode.mqh'   KeyCode.mqh     1       1
'KeyState.mqh'  KeyState.mqh    1       1
0 errors, 0 warnings, 152 msec elapsed          1       1
 
Ivan Titov #:

И скрипт не работает. Видимо константу TERMINAL_KEYSTATE_ESCAPE надо исключить из документации MQL4.

К сожалению, движок форума не показывает внутри темы, что она создана в MQL4-разделе.

Да, ESCAPE в MT4 не работает.