закрытие консоли

Тема в разделе "WASM.WIN32", создана пользователем was_log_a, 27 июл 2005.

  1. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    Мое приложение использует консоль.Хочу,чтобы при нажатии на кнопку окна консоли "закрыть" или CTRL+C закрывалась только консоль,а не программа целиком.Сначала я пробовал так:создал обработчик управляющих сигналов (с помощью SetConsoleCtrlHandler),который вырубал поток,в котором он был запущен.Но программа все равно секунд через 5 закрывалась.Потом установил хук типа WH_GETMESSAGE,но он чего-то не ловит сообщение WM_CLOSE:


    Код (Text):
    1. LRESULT CALLBACK con_hook(int code,WPARAM wp,LPARAM lp)
    2. {
    3. DWORD br;
    4. char buf[]="Console message\n";
    5. if (code<0)
    6. return CallNextHookEx(NULL,code,wp,lp);
    7. else
    8.  {
    9. if ( ((MSG*)lp)->hwnd==con_hw )
    10.     {
    11. WriteFile(d_stdout,buf,lstrlen(buf),&br,NULL);
    12. if ( ((MSG*)lp)->message==WM_CLOSE )
    13. MessageBox(NULL,"WM_CLOSE","",MB_OK);
    14.     }
    15.  }
    16.  return CallNextHookEx(NULL,code,wp,lp);
    17. }




    Что посоветуете?

    :)
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Может в HandlerRoutine попробовать FreeConsole?
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Почитай внимательно про HandleRoutine.



    The CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT signals give the process an opportunity to clean up before termination. A HandlerRoutine can perform any necessary cleanup, then take one of the following actions:

    <ul type=disc>

    <li> Call the ExitProcess function to terminate the process.

    <li> Return FALSE. If none of the registered handler functions returns TRUE, the default handler terminates the process.

    <li>Return TRUE. In this case, no other handler functions are called, and the system displays a pop-up dialog box that asks the user whether to terminate the process. The system also displays this dialog box if the process does not respond within a certain time-out period (5 seconds for CTRL_CLOSE_EVENT, and 20 seconds for CTRL_LOGOFF_EVENT or CTRL_SHUTDOWN_EVENT).

    </ul>
     
  4. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    Может в HandlerRoutine попробовать FreeConsole?



    Я так и делал.



    А может,легче свою консоль написать-вроде окна с EDITBOX-ом?
     
  5. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    was_log_a




    От CTRL+C, CTRL_C_BREAK_EVENT должно помочь, для остальных IceStudent процитировал, можно разве что успеть перезапустить свою прогу