Ver Mensaje Individual
  #3  
Antiguo 20-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 26
seoane Va por buen camino
Prueba con esto:
Código Delphi [-]
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 ...');
    // Aqui iniciamos el Timer
    SetTimer(0,0,1000,@TimerProc);
    while not Terminar do
    begin
      // Aqui haz lo que quieras
      ProcessMessages;
      if not Terminar then
        Sleep(10);
    end;
  end;
end.
Responder Con Cita