Функция SetConsoleCtrlHandler


Функция SetConsoleCtrlHandler добавляет или удаляет определяемую программой функцию HandlerRoutine из списка функций обработчиков особой ситуации для вызывающего процесса.

Windows NT /2000/XP: Если никакая другая функция обработчика особой ситуации не определена, функция устанавливает наследуемый атрибут, который выясняет, игнорирует ли вызывающий процесс сигналы CTRL+C.

Синтаксис

BOOL SetConsoleCtrlHandler(

PHANDLER_ROUTINE 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

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz