Biblioteki C/C++
SetConsoleCtrlHandler
[funkcja] Dodaje lub usuwa procedurę HandlerRoutine dla aktualnego procesu.Składnia
#include <windows.h>
BOOL WINAPI SetConsoleCtrlHandler(
PHANDLER_ROUTINE HandlerRoutine,
BOOL Add
);
Argumenty
Zwracana wartość
Jeśli funkcja kończy się powodzeniem, zwraca wartość niezerową. W przeciwnym razie, zwrócona wartość jest równa zero. By otrzymać dodatkowe informacje o błędzie, użyj GetLastError().
Opis szczegółowy
Ta funkcja działa podobnie do komunikatu WM_QUERYENDSESSION w aplikacjach okienkowych z pętlą komunikatów. Możesz również używać tej funkcji w programach okienkowych ale jest prawdopodobne, że komunikat WM_QUERYENDSESSION zostanie obsłużony jako pierwszy.
Każdy proces konsolowy ma własną listę z procedurami do obsługi Ctrl+C i Ctrl+Break. Te procedury obsługują także komunikaty generowane przez system gdy użytkownik zamyka konsole lub wyłącza system. Domyślnie, taka lista zawiera tylko procedurę wywołującą funkcję ExitProcess(). Proces dodaje i usuwa procedury wywołując SetConsoleCtrlHandler() co nie ma wpływu na inne procesy. Gdy proces otrzymuje sygnał, procedury są wywoływane wedle schematu "ostatnia zarejestrowana = pierwsza wywołana" dopóki jakaś procedura nie zwróci TRUE. Jeśli żadna nie zwróci TRUE, wywoływana jest domyślna procedura kończąca proces.
W procesach konsolowych kombinacje klawiszy Ctrl+C i Ctrl+Break są traktowane jako sygnały CTRL_C_EVENT i CTRL_BREAK_EVENT. Jeśli aktywne okno konsoli otrzyma Ctrl+C lub Ctrl+Break, sygnał jest przekazywany do wszystkich procesów współdzielących tę konsolę.
Ctrl+Break jest zawsze traktowane jako sygnał ale przeznaczenie Ctrl+C może być zmienione na trzy sposoby:
Proces konsolowy może użyć funkcji GenerateConsoleCtrlEvent() by wysłać sygnał Ctrl+C lub Ctrl+Break do grupy procesów konsolowych.
System generuje sygnały CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT gdy użytkownik odpowiednio: zamyka konsole, wylogowuje się lub wyłącza system. Proces ma wtedy możliwość by prawidłowo zakończyć działanie.
Funkcje konsolowe lub funkcje CRT wywołujące funkcje konsolowe mogą nie działać podczas przetwarzania wyżej wymienionych trzech sygnałów. Powodem jest to, że część lub wszystkie wewnętrzne konsolowe procedury sprzątające mogą być wywołane przed obsługą sygnału przez proces.
Wymagania
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.