Interceptar el final de un programa cónsola
Artículo por Club Developers · 01 marzo 2006
3324 vistas
En una aplicación cónsola, el código de la sección Finalization se ejecuta si la aplicación se termina de forma normal. No obstante, si el usuario cierra la cónsola pulsando en la cruz de cerrar de la ventana (por ejemplo), el código de la sección Finalization no se ejecutará nunca.
El uso del API SetConsoleCtrlHandler remedia el problema. En este caso pondremos el código de finalización en la función en cuestión.
Nota: dentro del IDE, la finalización de este programa puede causar un fin anómalo del IDE.
El uso del API SetConsoleCtrlHandler remedia el problema. En este caso pondremos el código de finalización en la función en cuestión.
delphi
program console; {$APPTYPE CONSOLE} uses Windows, SysUtils; function ConProc(CtrlType : DWord) : Bool; stdcall; far; var S : String; begin case CtrlType of CTRL_C_EVENT : S := 'CTRL_C_EVENT'; CTRL_BREAK_EVENT : S := 'CTRL_BREAK_EVENT'; CTRL_CLOSE_EVENT : S := 'CTRL_CLOSE_EVENT'; CTRL_LOGOFF_EVENT : S := 'CTRL_LOGOFF_EVENT'; CTRL_SHUTDOWN_EVENT : S := 'CTRL_SHUTDOWN_EVENT'; else S := 'UNKNOWN_EVENT'; end; // Código de finalización MessageBox(0, PChar(S + ' detectado'), 'Win32 Console', MB_OK); Result := True; end; begin SetConsoleCtrlHandler(@ConProc, True); Writeln('enter para terminar'); Readln; // desactivar el handle // SetConsoleCtrlHandler(@ConProc, False); end.
Nota: dentro del IDE, la finalización de este programa puede causar un fin anómalo del IDE.