Мое приложение использует консоль.Хочу,чтобы при нажатии на кнопку окна консоли "закрыть" или CTRL+C закрывалась только консоль,а не программа целиком.Сначала я пробовал так:создал обработчик управляющих сигналов (с помощью SetConsoleCtrlHandler),который вырубал поток,в котором он был запущен.Но программа все равно секунд через 5 закрывалась.Потом установил хук типа WH_GETMESSAGE,но он чего-то не ловит сообщение WM_CLOSE: Код (Text): LRESULT CALLBACK con_hook(int code,WPARAM wp,LPARAM lp) { DWORD br; char buf[]="Console message\n"; if (code<0) return CallNextHookEx(NULL,code,wp,lp); else { if ( ((MSG*)lp)->hwnd==con_hw ) { WriteFile(d_stdout,buf,lstrlen(buf),&br,NULL); if ( ((MSG*)lp)->message==WM_CLOSE ) MessageBox(NULL,"WM_CLOSE","",MB_OK); } } return CallNextHookEx(NULL,code,wp,lp); } Что посоветуете?
Почитай внимательно про 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>
Может в HandlerRoutine попробовать FreeConsole? Я так и делал. А может,легче свою консоль написать-вроде окна с EDITBOX-ом?
was_log_a От CTRL+C, CTRL_C_BREAK_EVENT должно помочь, для остальных IceStudent процитировал, можно разве что успеть перезапустить свою прогу