关闭Windows控制台的操作

时间:2013-12-04 20:50:08

标签: windows console

我正在编写一个不带控制台输入的Windows控制台程序。用户通过单击关闭按钮将其关闭。有没有办法认识到它被关闭以执行最后一次操作?

1 个答案:

答案 0 :(得分:1)

是的,有。您设置了一个控制台控制处理程序函数(一个回调),它可以获得有关一些事件的信息。这是Delphi中的一个例子。如果你需要另一种语言,你应该明白这个想法。

function MyConsoleEventHandler( dwCtrlType : DWORD) : BOOL;  stdcall;
// note: will be called from another thread!
begin
  result := TRUE;
  try
    case dwCtrlType of
      CTRL_C_EVENT        :  Writeln('Ctrl+C');
      CTRL_BREAK_EVENT    :  Writeln('Ctrl+Break');
      CTRL_CLOSE_EVENT    :  Writeln('CloseTask-Signal');
      CTRL_LOGOFF_EVENT   :  Writeln('LogOff-Signal');
      CTRL_SHUTDOWN_EVENT :  Writeln('Shutdown-Signal');
    else
      Writeln('Console-Event ',dwCtrlType,' received');
    end;

    if g_StopServer <> nil then begin
      Writeln( 'Stopping the Server ...');
      g_StopServer.SetEvent;
    end;

  except
    // catch all
  end;
end;


class procedure TMyServer.Run;
begin
  SetConsoleCtrlHandler( @MyConsoleEventHandler, TRUE);

  Writeln('Server listening at port '+IntToStr(PORT_SOAP));
  Writeln('Press Ctrl+C to stop the server.');
  Writeln;
  g_StopServer.WaitFor( INFINITE);
end;