4

I'm developing a simple C++ console application without classes & objects.
Is there any method or function to prevent the console from closing when red X button is clicked ?
I'm using Visual Studio C++ Express 2010 : A simple console application which containes only main.cpp file. Thank you for answering my question :) !!

4 Answers 4

8

This worked for me:

#include "conio.h" void main() { HWND hwnd = GetConsoleWindow(); HMENU hmenu = GetSystemMenu(hwnd, FALSE); EnableMenuItem(hmenu, SC_CLOSE, MF_GRAYED); } 

While we're at it, to re-enable the button:

EnableMenuItem(hmenu, SC_CLOSE, MF_ENABLED); 

... and to set the window's title:

char consoleTitle[256]; wsprintf(consoleTitle, _T("My little window")); SetConsoleTitle((LPCTSTR)consoleTitle); 

I saw that most references used DeleteMenu and not EnableMenuItem. I preffer the later, as you get more control (enable/disable/greyed-out etc.). For full options, take a look at MSDN Console Functions and Menu Functions

Sign up to request clarification or add additional context in comments.

Comments

5

You can use SetConsoleCtrlHandler to control the console-window. You need to write up a callback to handle events (such as CTRL_CLOSE_EVENT). You may also use GetConsoleWindow function to get the window-handle, and handle window messages. I have done controlling the window with former method, and not sure about handling specific window message (via window-handle).

Refer Console Functions.

Comments

1

It is possible to trap the close message for a window and prevent it from closing, if you are receiving messages for the window. Unfortunately a console is independent of the program running within it and you don't have that kind of control.

Comments

0

You could always use signals:

#include <cstdio> void my_handler(int param) { main(); } int main() { signal(SIGABRT, my_handler); signal(SIGTERM, my_handler); return 0; } 

You should obviously allow an option for the user to close the app, by changing my_handler. my_handler calls main, so whenever the program is closed, my_handler is called, so therefore main is called.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.