2013-04-05 3 views
2

Я разрабатываю простое консольное приложение на C++ без классов & объектов.
Есть ли какой-либо метод или функция, чтобы предотвратить закрытие консоли при нажатии кнопки красного X?
Я использую Visual Studio C++ Express 2010: простое консольное приложение, которое содержит только файл main.cpp. Спасибо, что ответили на мой вопрос :) !!C++ Предотвратите закрытие окна консоли при нажатии на красный X

ответ

0

Жаль, что это не комментарий, у меня пока нет комментариев.

Не можете ли вы просто удалить кнопку в свойствах для формы?

+0

Консоль не генерируется программой, она генерируется самой Windows. У вас нет никакого контроля над этим. –

+0

А, я привык работать с C++ Builder и RAD Studio, где у вас есть форма Delphi, чтобы манипулировать свойствами формы. И я использовал приложения формы VB в Visual Studios, поэтому я подумал, что он может сделать то же самое. Спасибо, что расчистил его для меня. – Phil

+0

Да, вы также можете удалить кнопку «Закрыть». Используйте 'GetConsoleWindow' и' GetSystemMenu'. Но сначала я предлагаю вам сделать с фактическим окном (GUI), чтобы получить удобство. – Ajay

1

Возможно закрытие закрытого сообщения для окна и предотвращение его закрытия, если вы получаете сообщения для окна. К сожалению, консоль не зависит от выполняемой в ней программы, и у вас нет такого контроля.

4

Вы можете использовать SetConsoleCtrlHandler для управления консольным окном. Вам необходимо написать обратный вызов для обработки событий (например, CTRL_CLOSE_EVENT). Вы также можете использовать функцию GetConsoleWindow для получения окна-дескриптора и обрабатывать сообщения окна. Я выполнил управление окном с помощью прежнего метода и не уверен в обработке конкретного окна сообщения (через оконный дескриптор).

Refer Console Functions.

4

Это работает для меня:

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

В то время как мы на него, чтобы повторно включить кнопку:

EnableMenuItem(hmenu, SC_CLOSE, MF_ENABLED); 

... и установить заголовок окна:

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

Я видел, что большинство использованных ссылок DeleteMenu и не EnableMenuItem. Я предпочитаю позже, поскольку вы получаете больше контроля (включение/выключение/выделение серых и т. Д.). Полные варианты, посмотрите на MSDN Console Functions и Menu Functions

0

Вы всегда можете использовать сигналы:

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

Вы должны явно разрешить возможность для пользователя, чтобы закрыть приложение, изменив my_handler. my_handler вызывает main, поэтому всякий раз, когда программа закрывается, вызывается my_handler, поэтому вызывается main.

Смежные вопросы