На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела FAQ в группе разделов С++.
1. Раздел FAQ предназначен для публикации готовых статей.
2. Здесь нельзя задавать вопросы, для этого существуют соответствующие разделы:
Чистый С++
Visual C++ / MFC / WTL / WinApi
Borland C++ Builder
COM / DCOM / ActiveX / ATL
Сопутствующие вопросы
3. Внимание, все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут видны остальным участникам только после одобрения модератора.
Модераторы: B.V., Qraizer
  
> Как перехватить закрытие Win32 Console
    Кто-нибудь знат как перехватить закрытие консольного окна, по нажатию на крестик(Win 32 Console Appliction)? Заранее спасибо!
      Хороший вопрос. Единственное, что мне приходит в голову - это определить HWND консольного окна, хукнуть его оконную процедуру и поймать WM_SYSCOMMAND с параметром SC_CLOSE. Не совсем понятно, что при этом делать однако же :) Но попробовать можно

      Добавлено в :
      На самом деле оказалось гораздо проще:

      ExpandedWrap disabled
        #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;
        }
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0153 ]   [ 14 queries used ]   [ Generated: 21.05.24, 11:39 GMT ]