program Ejemplo;
{$APPTYPE CONSOLE}
uses Windows, Messages, SysUtils;
var
Terminar: Boolean;
procedure ProcessMessages;
var
Msg: TMsg;
begin
while PeekMessage(Msg,0,0,0,PM_REMOVE) do
begin
if Msg.Message = WM_QUIT then
begin
Terminar:= TRUE;
break;
end else
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
end;
function HandlerRoutine(dwCtrlType: DWORD): BOOL; stdcall;
begin
Result:= TRUE;
case dwCtrlType of
CTRL_C_EVENT:
Terminar:= TRUE;
CTRL_CLOSE_EVENT:
Terminar:= TRUE;
CTRL_LOGOFF_EVENT:
Terminar:= TRUE;
CTRL_SHUTDOWN_EVENT:
Terminar:= TRUE;
else
Result:= FALSE;
end;
end;
procedure TimerProc(Wnd: HWnd; Msg, TimerID, SysTime: Longint); stdcall;
begin
Windows.Beep(500,100);
end;
begin
Terminar:= FALSE;
if SetConsoleCtrlHandler(@HandlerRoutine,TRUE) then
begin
Writeln('Pulsa Ctrl+C para salir ...');
SetTimer(0,0,1000,@TimerProc);
while not Terminar do
begin
ProcessMessages;
if not Terminar then
Sleep(10);
end;
end;
end.