# Обработка нажатия ESC или "Авторам долгодумающих плагинов посвящается..."

`Иван Синтюрин spinoza@mail.ru`

Очередное воззвание к народу:

ДЕЛАЙТЕ ПЛАГИНЫ ИНТЕРАКТИВНЫМИ!

Это в общем, а в частном...

Написали вы свой супер-пупер-мега-плагин. Замечательно! Если он делает своё тёмное/светлое :-) дело быстро, за доли секунды, то можете дальше не читать. А если некоторые операции, осуществляемые плагином, требуют определённого времени, то следует обязательно обрабатывать в плагине нажатие ESC (или чего-нибудь ещё).

Зачем? Пользователь - существо странное, вдруг он запустил ваш плагин по ошибке (или тот самостоятельно запустился, что не меняет сути дела) или сознательно, но резко передумал. Как ему быть в данной ситуации? FAR убивать? А плагин думает, работает, а пользователь волосы на себе рвёт и проклинает Вас. Выход прост - плагин должен реагировать (интерактивность!) на нажатие клавиши «ESC» (Escape - бегство, бурж.). Для этого можно использовать, например, следующую функцию (за основу взята функция из файла Examples\MultiArc\ARCMIX.CPP):

    bool CheckForEsc(void)
    {
     bool EC=false;
     INPUT_RECORD rec;
     static HANDLE hConInp=GetStdHandle(STD_INPUT_HANDLE);
     DWORD ReadCount;
     while (1)
     {
      PeekConsoleInput(hConInp,&rec,1,&ReadCount);
      if (ReadCount==0) break;
      ReadConsoleInput(hConInp,&rec,1,&ReadCount);
      if (rec.EventType==KEY_EVENT)
         if (rec.Event.KeyEvent.wVirtualKeyCode==VK_ESCAPE &&
             rec.Event.KeyEvent.bKeyDown) EC=true;
     }
     return(EC);
    }

Дальше, где нужно, пишем что-то типа:

    ...
    if(CheckForEsc()) ... //реакция на нажатие ESC, например, выход из плагина
    else ... //работаем дальше
    ...

That's all, folks :-)

дополнения от Василия Мошнинова
`
13.12.1999
Rev. 06.09.2000`
наверх