如何在Delphi控制台应用程序中处理Ctrl + C?

如何在Delphi控制台应用程序中处理Ctrl + C?

问题描述:

有没有最佳实践和代码片段显示如何在Delphi控制台应用程序中处理Ctrl + C?

Are there best practices and code snippets available which show how I can handle Ctrl+C in a Delphi console application?

我发现了一些文章,关于可能的调试器问题,包括异常处理,卸载DLL,关闭stdin和完成

I have found some articles which give some information about possible problems with the debugger, with exception handling, unloading of DLLs, closing of stdin, and finalization for example this CodeGear forums thread.

从Windows API( MSDN ):

From Windows API (MSDN):

BOOL WINAPI SetConsoleCtrlHandler(
    PHANDLER_ROUTINE HandlerRoutine,    // address of handler function  
    BOOL Add    // handler to add or remove 
   );   

HandlerRoutine函数是控制台进程指定的函数,用于处理进程接收的控制信号。该函数可以有任何名称。

A HandlerRoutine function is a function that a console process specifies to handle control signals received by the process. The function can have any name.

BOOL WINAPI HandlerRoutine(
    DWORD dwCtrlType    //  control signal type
   );   






在Delphi中,处理程序应该是这样的:


In the Delphi the handler routine should be like:

function console_handler( dwCtrlType: DWORD ): BOOL; stdcall;
begin
  // Avoid terminating with Ctrl+C
  if (  CTRL_C_EVENT = dwCtrlType  ) then
    result := TRUE
  else
    result := FALSE;
end;