Иван Синтюрин 
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