Функция
SetConsoleCtrlHandlerФункция
SetConsoleCtrlHandler добавляет или удаляет определяемую программой функцию HandlerRoutine из списка функций обработчиков особой ситуации для вызывающего процесса.Windows NT /2000/XP:
Если никакая другая функция обработчика особой ситуации не определена, функция устанавливает наследуемый атрибут, который выясняет, игнорирует ли вызывающий процесс сигналы CTRL+C.Синтаксис
BOOL SetConsoleCtrlHandler( HandlerRoutine, // обработчик функции BOOL Add // добавить или удалить обработчик ); |
Параметры
HandlerRoutine
[in] Указатель на определяемую программой
функцию HandlerRoutine, которую добавляют или удаляют.Windows NT/2000/XP: Этот параметр может быть ПУСТО (NULL).
Add
[in] Если этот параметр - ИСТИНА (TRUE), обработчик особой ситуации добавляется; если он - ЛОЖЬ (FALSE), обработчик особой ситуации удаляется.
Windows NT /2000/XP:
Если параметр HandlerRoutine имеет значение ПУСТО (NULL), значение TRUE заставляет, вызывающий процесс игнорировать ввод CTRL+C, а значение FALSE восстанавливает нормальную обработку ввода CTRL+C. Этот атрибут, наследуемый дочерними процессами, игнорирует или обрабатывает CTRL+C.Если этот параметр - ИСТИНА (TRUE), обработчик особой ситуации добавляется; если он - ЛОЖЬ (FALSE), обработчик особой ситуации удаляется.
Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения - не ноль.
Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Чтобы получать расширенные данные об ошибках, вызовите
функцию GetLastError.Замечания
Каждый консольный процесс имеет свой собственный список определяемых программой
функций HandlerRoutine, которые обрабатывают сигналы CTRL+BREAK и CTRL+C. Функции обработчика особой ситуации также обрабатывают сигналы, созданные системой, когда пользователь закрывает консоль, заканчивает работу в сети, или закрывает систему. Вначале, список обработчиков особой ситуации для каждого процесса содержит только заданную по умолчанию функцию обработчика, которая вызывает функцию ExitProcess. Консольный процесс добавляет или удаляет дополнительные функции обработчика особой ситуации путем вызова функции SetConsoleCtrlHandler, которая не затрагивает список функций обработчиков особой ситуации для других процессов. Когда консольный процесс получает какой-либо из управляющих сигналов, его функции обработчиков особых ситуаций обращаются к последнему из зарегистрированных, который является первым из вызываемых основных компонентов до тех пор, пока один из обработчиков не возвратит значение ИСТИНА (TRUE). Если ни один из обработчиков особой ситуации не возвращает значение ИСТИНА (TRUE), вызывается заданный по умолчанию обработчик особой ситуации.Для консольных процессов, комбинации клавиш CTRL+C и CTRL+BREAK обычно трактуются как сигналы (
CTRL_C_EVENT и CTRL_BREAK_EVENT). Когда консольное окно с фокусом клавиатуры получает сигнал CTRL+C или CTRL+BREAK, эти сигналы обычно пересылаются во все процессы, совместно использующие эту консоль.Консольный процесс может использовать
функцию GenerateConsoleCtrlEvent, чтобы отправить CTRL+C или сигнал CTRL+BREAK группе процессов консоли.Система создает сигналы
CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT и CTRL_SHUTDOWN_EVENT, когда пользователь закрывает консоль, заканчивает работу в сети, или прекращает работу системы так, чтобы процесс имел возможность очиститься перед завершением. Консольные функции, или любые функции периода исполнения языка программирования C, которые вызывают консольные функции, не могут работать надежно в течение обработки любого из этих трех сигналов, упомянутых перед этим. Причина заключается в том, что некоторые или все внутренние консольные процедуры очистки, возможно, были вызваны перед выполняющимся обработчиком особой ситуации сигнала процесса.Код примера
Пример смотри в статье
Регистрация функции управления обработчиком.Смотри также
Обзор консольных приложений, Функции консоли, ExitProcess, GenerateConsoleCtrlEvent, GetConsoleMode, HandlerRoutine, SetConsoleMode
Размещение и совместимость SetConsoleCtrlHandler |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Kernel32.lib |
Заголовочный файл |
|
- объявлено в |
Wincon.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |