Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: jankowalski25
Biblioteki C/C++

HandlerRoutine

[funkcja] Funkcja definiowana przez programistę używana z funkcją » WinAPISetConsoleCtrlHandler.

Składnia

C/C++
#include <windows.h>

BOOL WINAPI HandlerRoutine( DWORD dwCtrlType );

Argumenty

ArgumentOpis
dwCtrlTypeTyp sygnałów sterujących do przechwytywania. Wartość tego argumentu może być jedną z poniższych stałych:
NazwaWartośćZnaczenie
CTRL_C_EVENT0Sygnał CTRL+C będzie pobierany z wejścia klawiatury lub z sygnału tworzonego przez funkcję » WinAPIGenerateConsoleCtrlEvent.
CTRL_BREAK_EVENT1Sygnał CTRL+BREAK będzie pobierany z wejścia klawiatury lub z sygnału tworzonego przez funkcję » WinAPIGenerateConsoleCtrlEvent.
CTRL_CLOSE_EVENT2Sygnał wysyłany przez system do wszystkich procesów zawierających konsolę, gdy użytkownik zamknie konsolę (przez kliknięcie przycisku Zamknij lub Zakończ zadanie w Menedżerze zadań.
CTRL_LOGOFF_EVENT5Sygnał wysyłany przez system do wszystkich procesów konsoli, gdy użytkownik się wylogowuje. Ten sygnał nie wskazuje, który użytkownik się wylogowuje. Ten sygnał jst pobierany tylko przez usługi. Aplikacje interaktywne są zamykane podczas wylogowania, więc nie pokazują, kiedy system wysyła ten sygnał.
CTRL_SHUTDOWN_EVENT6Sygnał wysyłany przez system podczas jego zamykania. Interaktywne aplikacje nie pokazują czasu wysłania tego sygnału, dlatego może być on przechwytywany tylko przez usługi. Usługi mają własny mechanizm powiadomień dla takich zdarzeń. Ten sygnał może być również utworzony przez funkcję » WinAPIGenerateConsoleCtrlEvent.

Zwracana wartość

Jeśli funkcja przechwyci sygnał sterujący, powinna zwrócić wartość TRUE. Jeśli zwróci FALSE, zostanie wywołana następna funkcja przechwytująca sygnały sterujące.

Dodatkowe informacje

Proces konsoli używa tej funkcji do przechwytywania sygnałów sterujących. Kiedy sygnał jest pobierany, system tworzy nowy wątek w procesie do wykonywania funkcji. Typ PHANDLER_ROUTINE określa wskaźnik do tej funkcji zwrotnej. HandlerRoutine jest zastępczą nazwą funkcji definiowanej przez programistę. Funkcja może być zakończona przez inny wątek w tym procesie i dlatego należy zwracać szczególną uwagę na synchronizację wątków dla tej funkcji. Inne procesy konsoli mają własne listy takich funkcji. Taka lista zawiera tylko domyślne uchwyty funkcji wywołujące ExitProcess. Proces konsoli może dodawać i usuwać dodatkowe uchwyty funkcji przez wywołanie funkcji » WinAPISetConsoleCtrlHandler. Wymieniona funkcja nie bierze pod uwagę listy przechwytywanych funkcji dla innych procesów. Kiedy proces konsoli pobiera sygnał sterujący, funkcje przechwytujące są wywoływane w kolejności odwrotnej do kolejności rejestracji, dopóki jeden z uchwytów nie zwróci TRUE. Jeśli wszystkie funkcje zwrócą FALSE, domyślny uchwyt jest wywoływany. Sygnały CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT oraz CTRL_SHUTDOWN_EVENT dają procesowi możliwość zwolnienia pamięci przed jego zakończeniem. Ta funkcja może wykonać każde konieczne zwalnianie zasobów, a następnie jedno z poniższych działań:
  • Wywołać funkcję ExitProcess, aby zakończyć proces.
  • Zwrócić FALSE. Jeśli żaden zarejestrowany uchwyt funkcji nie zwróci TRUE, domyślny uchwyt zamyka proces.
  • Zwrócić TRUE. W tym przypadku żadne inne uchwyty funkcji nie są wywoływane i system zamyka proces.
  • Wywołać funkcję SetProcessShutdownParameters, aby zapobiec pokazaniu okna dialogowego dla użytkownika podczas wylogowania lub zamykania systemu. W tym przypadku system zamyka proces, kiedy ta funkcja zwróci TRUE lub gdy okres oczekiwania na odpowiedź procesu się skończy.
Kiedy program zawierający konsolę jest uruchomiony jako usługa, pobiera zmodyfikowany domyślny uchwyt sterowania konsoli. Ten uchwyt nie wywołuje funkcji ExitProcess podczas przetwarzania sygnałów CTRL_LOGOFF_EVENT oraz CTRL_SHUTDOWN_EVENT. To powoduje, że usługi kontynuują działanie po tym, jak uzytkownik się wyloguje. Jeśli usługi instalują własny uchwyt sterowania konsolą, jest on wywoływany przed domyślnym uchwytem. Jeśli zainstalowany uchwyt wywołuje funkcję ExitProcess podczas przetwarzania sygnału CTRL_LOGOFF_EVENT, usługa kończy swoje działanie, gdy użytkownik się wylogowuje. Zauważ, że inna biblioteka lub plik DLL może zainstalować uchwyt sterowania konsoli do dowolnego programu. Jeśli to zrobi, ten uchwyt zastąpi domyślny uchwyt i może spowodować zamknięcie programu podczas wylogowania.

Wymagania

Minimalny system klientaWindows 2000 Professional (tylko aplikacje biurowe).
Minimalny system serweraWindows 2000 Server (tylko aplikacje biurowe).
NagłówekWincon.h (dołącza Windows.h)

Linki zewnętrzne