Приветствую Вас ГостьПонедельник, 07.07.2025, 10:09

Light Midnight Inc.


Каталог статей

Главная » Статьи » Программирование » С/С++/MFC

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

Категория: С/С++/MFC | Добавил: Cromartie (31.01.2013)
Просмотров: 407 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 543
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Cheсking
Часы
Мини-чат
200
Друзья Сайта
  • Light Midnight - Ваша Еда
  • Light Midnight - Anim as life style
  • Поиск