, , <Ctrl+C> . .
SetConsoleCtrlHandler Ctrl-c, Ctrl-break , . GenerateConsoleCtrlEvent, 6, , , , , . , DWORD, .
, . , , :
BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, BOOL Add)
Add, TRUE, , . , . , , .
DWORD, . (HandlerRoutine) , .
, .
HandlerRoutine NULL, Add TRUE, Ctrl-c .
SetConsoleMode ENABLE_PROCESSED_INPUT ( 2), <Ctrl+C> , .
(. 7) . , , .
, , , . , , , ( 8).
. , , , .
BOOL HandlerRoutine(DWORD dwCtrlType)
dwCtrlType ( ) :
|
|
1. CTRL_C_EVENT , <Ctrl+C> .
2. CTRL_CLOSE_EVENT .
3. CTRL_BREAK_EVENT Ctrl-break.
4. CTRL_LOGOFF_EVENT .
5. CTRL_SHUTDOWN_EVENT .
" " , . TRUE. FALSE, , . , , , .
:
4.5 , 5 , . , <Ctrl+C> . , 10 , , , TRUE. Exit . ; , . , .
WINAPI; , Windows, . Microsoft WTYPES..
4.5. Ctrlc:
/* 4. Ctrlc. */
/* . */
#include "EvryThng.h"
static BOOL WINAPI Handler(DWORD CtrlEvent); /* . WTYPES.H. */
volatile static BOOL Exit = FALSE;
int _tmain(int argc, LPTSTR argv[])
/* . */
{
/* . */
if (!SetConsoleCtrlHandler(Handler, TRUE)) ReportError(_T(" ."), 1, TRUE);
while (!Exit) {
Sleep (5000); /* 5 . */
(1000 /* . */, 250 /* . */);
}
_tprintf(_T(" .\n"));
return 0;
}
BOOL WINAPI Handler (DWORD CtrlEvent) {
Exit = TRUE;
switch (CntrlEvent) {
/* , . */
case CTRL_C_EVENT:
_tprintf(_T(" Ctrl-c. 10 .\n"));
Sleep(4000); /* , . */
_tprintf(_T(" 6 .\n"));
|
|
Sleep(6000); /* . */
return TRUE; /* TRUE . */
case CTRL_CLOSE_EVENT:
_tprintf(_T(" 10 .\n"));
Sleep(4000);
_tprintf(_ (" 6 .\n"));
Sleep (6000); /* . */
return TRUE; /* FALSE. ? */
default:
_tprintf(_T(": %d. 10 .\n"), CntrlEvent);
Sleep(4000);
_tprintf(_T(" 6 .\n"));
Sleep(6000);
return TRUE;
}
}