在认为这是一个重复的问题之前,请先阅读以下内容:是的,至少在Delphi,C#和C ++中,这个问题都以不同的语言出现在SO上,但是它们都有一些共同点:他们谈论处理干净关闭没有阻止它。
所以我们开始:
形成一个VCL应用程序,我使用AllocConsole
打开一个新的控制台窗口,但是当关闭带有右上角的叉号的窗口时,我的应用程序终止。我想预防无法处理!
某些代码:
function Handler(dwCtrlType: DWORD): Boolean; cdecl;
begin
case dwCtrlType of
CTRL_CLOSE_EVENT, CTRL_C_EVENT, CTRL_BREAK_EVENT:
Exit(True);
else
Exit(false);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AllocConsole;
SetConsoleCtrlHandler(@Handler, True);
end;
我已经读过WinAPI documentation,但是它并没有说明阻止应用程序终止。
我尝试在MainForm上为WM_ENDSESSION
,WM_QUERYENDSESSION
,WM_CLOSE
和WM_QUIT
添加消息处理程序,但是没有一个被调用。我也尝试添加一个FormCloseQuery
事件,但也未调用该事件。
我已阅读并尝试了找到here的解决方案,但是SetConsoleCtrlHandler(nil, True);
没有提供终止服务的申请
所以总之如何防止终止。