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