Как перехватить закрытие 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; }
|
|