Как перехватить закрытие Win32 Console
Хороший вопрос. Единственное, что мне приходит в голову - это определить HWND консольного окна, хукнуть его оконную процедуру и поймать WM_SYSCOMMAND с параметром SC_CLOSE. Не совсем понятно, что при этом делать однако же Но попробовать можно
На самом деле оказалось гораздо проще:
На самом деле оказалось гораздо проще:
#include <windows.h> #include <stdio.h> #include <conio.h> HANDLE g_hEvent = 0; BOOL WINAPI HandlerRoutine( DWORD dwCtrlType // control signal type ) { if (!g_hEvent) return FALSE; switch (dwCtrlType) { case CTRL_C_EVENT: printf ("Ctrl+C pressed"); SetEvent (g_hEvent); break; case CTRL_BREAK_EVENT: printf ("Ctrl+Break pressed"); SetEvent (g_hEvent); break; case CTRL_CLOSE_EVENT: printf ("Close pressed"); SetEvent (g_hEvent); break; case CTRL_LOGOFF_EVENT: printf ("User logoff"); SetEvent (g_hEvent); break; case CTRL_SHUTDOWN_EVENT: printf ("System shutdown"); SetEvent (g_hEvent); break; } return TRUE; // as we handle the event } int main(int argc, char* argv[]) { g_hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); SetConsoleCtrlHandler (HandlerRoutine, TRUE); if (g_hEvent) { printf ("Waiting for the window to close...\n"); WaitForSingleObject (g_hEvent, INFINITE); CloseHandle (g_hEvent); } else printf ("Error creating event\n"); printf ("\nPress any key to exit!"); getch (); SetConsoleCtrlHandler (HandlerRoutine, FALSE); return 0; } |