Мой ответ - смесь всех вышеперечисленных ответов, простая и короткая.
Из Windows API ( MSDN ):
BOOL WINAPI SetConsoleCtrlHandler(
PHANDLER_ROUTINE HandlerRoutine, // address of handler function
BOOL Add // handler to add or remove
);
Функция HandlerRoutine - это функция, которую консольный процесс определяет для обработки управляющих сигналов, полученных этим процессом. Функция может иметь любое имя.
BOOL WINAPI HandlerRoutine(
DWORD dwCtrlType // control signal type
);
В Delphi процедура-обработчик должна выглядеть так:
function console_handler( dwCtrlType: DWORD ): BOOL; stdcall;
begin
// Avoid terminating with Ctrl+C
if ( CTRL_C_EVENT = dwCtrlType ) then
result := TRUE
else
result := FALSE;
end;