函数原型:
WINBASEAPI BOOL WINAPI SetConsoleCtrlHandler( __in_opt PHANDLER_ROUTINE HandlerRoutine, __in BOOL Add);
PHANDLER_ROUTINE原型:
typedef BOOL (WINAPI *PHANDLER_ROUTINE)( __in DWORD CtrlType );
当HandlerRoutine函数返回TRUE,则表示忽略当前发生的事件,程序继续执行。返回FALSE则表示立即退出当前进程。
实验表明,可以在其中调用ExitProcess退出进程,却不能通过调用ExitThread退出,而且调用ExitThread后,如果程序继续执行的话,
不会再次触发HandlerRoutine,此表明 HandlerRoutine的调用应该是在一个单独的线程中运行。
CtrlType类型:
#define CTRL_C_EVENT 0
#define CTRL_BREAK_EVENT 1
#define CTRL_CLOSE_EVENT 2
// 3 is reserved!
// 4 is reserved!
#define CTRL_LOGOFF_EVENT 5
#define CTRL_SHUTDOWN_EVENT 6
WINBASEAPI BOOL WINAPI SetConsoleCtrlHandler( __in_opt PHANDLER_ROUTINE HandlerRoutine, __in BOOL Add);
PHANDLER_ROUTINE原型:
typedef BOOL (WINAPI *PHANDLER_ROUTINE)( __in DWORD CtrlType );
当HandlerRoutine函数返回TRUE,则表示忽略当前发生的事件,程序继续执行。返回FALSE则表示立即退出当前进程。
实验表明,可以在其中调用ExitProcess退出进程,却不能通过调用ExitThread退出,而且调用ExitThread后,如果程序继续执行的话,
不会再次触发HandlerRoutine,此表明 HandlerRoutine的调用应该是在一个单独的线程中运行。
CtrlType类型:
#define CTRL_C_EVENT 0
#define CTRL_BREAK_EVENT 1
#define CTRL_CLOSE_EVENT 2
// 3 is reserved!
// 4 is reserved!
#define CTRL_LOGOFF_EVENT 5
#define CTRL_SHUTDOWN_EVENT 6