AllocConsole,SetConsoleCtrlHandler防止终止

时间:2019-04-20 06:46:30

标签: delphi winapi console

在认为这是一个重复的问题之前,请先阅读以下内容:是的,至少在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_ENDSESSIONWM_QUERYENDSESSIONWM_CLOSEWM_QUIT添加消息处理程序,但是没有一个被调用。我也尝试添加一个FormCloseQuery事件,但也未调用该事件。

我已阅读并尝试了找到here的解决方案,但是SetConsoleCtrlHandler(nil, True);没有提供终止服务的申请

所以总之如何防止终止。

0 个答案:

没有答案