Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/117: Рейтинг темы: голосов - 117, средняя оценка - 4.68
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147

Как запретить закрытие консоли?

29.12.2013, 22:01. Показов 23965. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как запретить закрытие консоли?

Подсказали, что для этого нужно использовать функцию SetConsoleCtrlHandler(). Но у меня не получается прикрутить её к программе. Вот ссылка на её описание http://msdn.microsoft.com/en-u... 85%29.aspx

Добавлено через 7 минут
C++
1
2
3
4
BOOL WINAPI SetConsoleCtrlHandler(
  _In_opt_  PHANDLER_ROUTINE HandlerRoutine,
  _In_      BOOL Add
);
Parameters

HandlerRoutine [in, optional]
A pointer to the application-defined HandlerRoutine function to be added or removed. This parameter can be NULL.

Add [in]
If this parameter is TRUE, the handler is added; if it is FALSE, the handler is removed.
If the HandlerRoutine parameter is NULL, a TRUE value causes the calling process to ignore CTRL+C input, and a FALSE value restores normal processing of CTRL+C input. This attribute of ignoring or processing CTRL+C is inherited by child processes.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2013, 22:01
Ответы с готовыми решениями:

Как запретить консоли закрываться?
Здравствуйте. Код: #include <iostream> #include <conio.h> using namespace std; int main() { int x;

Как убрать управляющие клавиши(закрытие, сворачивание, разворачивание) в консоли?
Очень важная тема

закрытие консоли
задание:Создать класс матрица Данный класс содержит указатель на float, размер строк и столбцов и состояние ошибки. Определить конструктор...

21
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
29.12.2013, 22:08
Цитата Сообщение от xoror Посмотреть сообщение
Как запретить закрытие консоли?
Так запускайте программу из командной строки
0
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
29.12.2013, 22:14  [ТС]
MicM, нет, мне не нужна командная строка. Например, эту программу дам другому пользователю, а он запустит её не через командную строку.
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
29.12.2013, 22:20
system ("pause") не подойдет?
0
 Аватар для uhx
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
29.12.2013, 22:48
Цитата Сообщение от MicM Посмотреть сообщение
system ("pause") не подойдет?
Я так понял он имел ввиду вообще запретить ее закрытие, а не поставить паузу.
1
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
30.12.2013, 10:22  [ТС]
Цитата Сообщение от uhx Посмотреть сообщение
Я так понял он имел ввиду вообще запретить ее закрытие, а не поставить паузу.
Это я и имею ввиду. Нужно полностью запретить закрытие консоли. Она должна сама закрыться после выполнения работы.
Если написать system("pause"); то программу все равно можно закрыть, щелкнув в правом верхнем углу на крестик.

Неужели никто не знает как это сделать?
0
30.12.2013, 10:45

Не по теме:

Цитата Сообщение от xoror Посмотреть сообщение
Неужели никто не знает как это сделать?
К С++ это каким боком? Знаете же, где нужно спрашивать о таких вещах.

0
40 / 40 / 6
Регистрация: 12.12.2013
Сообщений: 227
Записей в блоге: 1
30.12.2013, 16:13
Начни отлавливать сообщения WM_QUIT в адрес окна командной строки. Обрабатывай их без процедуры PostQuitMessage(). Только для этого тебе нужно будет самому обрабатывать сообщения от её окна. А это сложнее, но можно.
0
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
30.12.2013, 16:25  [ТС]
Цитата Сообщение от Timur_CF Посмотреть сообщение
Начни отлавливать сообщения WM_QUIT
Разве от консоли можно отлавливать сообщения?! Я даже и не представляю как это все можно сделать. Одно дело окно, но а в консоле ...

Добавлено через 1 минуту
Функция SetConsoleCtrlHandler. Что она вообще делает? Я так понимаю что через нее можно предотвратить закрытие консоли. Но как?!
0
40 / 40 / 6
Регистрация: 12.12.2013
Сообщений: 227
Записей в блоге: 1
30.12.2013, 16:37
Выставь ловушку на сообщения WM_QUIT.
Консоль такое же окно, как и все остальные, просто выглядит оно так...
Даже кнопке "Пуск" можно сообщения отсылать при желании.
Так вот, запускаешь ловушку (HHOOK) во второй поток консольного приложения.
Ловишь сообщение в адрес своего окна (консоли) - обработаешь - не закрывается.

Добавлено через 1 минуту
Или можешь просто спрятать её окно и при необходимости сам закрывать (программно).

Добавлено через 14 секунд
Последнее делается проще всего и без запарки.
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
30.12.2013, 18:38
Цитата Сообщение от xoror Посмотреть сообщение
Как запретить закрытие консоли?
Подсказали, что для этого нужно использовать функцию SetConsoleCtrlHandler().
Это кто Вам такую ерунду подсказал ?
Используя данную функцию, вы можете задать свой обработчик событий консоли, в
том числе и обработчик завершения. Но система все равно прибьет процесс, если
через какое-то время после прихода сигнала завершения он не окончит работу.

Цитата Сообщение от xoror Посмотреть сообщение
Неужели никто не знает как это сделать?
Я знаю, но оно того не стоит, поверьте.
1
 Аватар для Паскалька
10 / 10 / 2
Регистрация: 10.09.2013
Сообщений: 136
Записей в блоге: 1
30.12.2013, 20:41
C++
1
2
3
4
#include <conio.h>
//-------
getch();
return 0;
Добавлено через 2 минуты
Цитата Сообщение от Паскалька Посмотреть сообщение
C++
1
2
3
4
#include <conio.h>
//-------
getch();
return 0;
ой не то)))
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
30.12.2013, 21:10
xoror, лови нубское блокирование клоуза, закрыть окно простыми средствами не открыв диспетчер задач либо не применив програмный Enable невозможно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    HWND hWnd = GetForegroundWindow();
    cout<<"Try to close me..;)"<<endl;
    EnableWindow(hWnd, false);
    cin.get();
    return 0;
}
Миниатюры
Как запретить закрытие консоли?  
Вложения
Тип файла: rar NoKillConsole.rar (1.6 Кб, 37 просмотров)
Тип файла: rar NoKillConsole.exe.rar (36.1 Кб, 28 просмотров)
3
75 / 75 / 10
Регистрация: 26.02.2013
Сообщений: 224
30.12.2013, 23:00
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
закрыть окно простыми средствами не открыв диспетчер задач либо не применив програмный Enable невозможно.
а почему у меня закрывается если любую кнопку нажать?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
31.12.2013, 01:10
Цитата Сообщение от Stella Посмотреть сообщение
а почему у меня закрывается если любую кнопку нажать?
- предположу не отработало
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
EnableWindow(hWnd, false);
также предположу что тест проводился на 8-ке. Интересно взглянуть на видео закрытия и да хотелось бы услышать параметры ОСи
2
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
31.12.2013, 01:38
Лучший ответ Сообщение было отмечено как решение

Решение

Stella, Я понял о чём написал, ты осуществлял ввод, который я не блокировал, я лишь закрыл доступ к кнопкам закрытия окна. Если хотим ещё залочить и ввод с клавиатуры то для этого нужна доплнительаня строчка кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    BYTE pState;
    HWND hWnd = GetForegroundWindow();
    cout<<"Try to close me..;)"<<endl;
    EnableWindow(hWnd, false);
    GetKeyboardState(&pState);
    while( true )
    {
        Sleep(100);
        SetKeyboardState(&pState);
    }
    return 0;
}
Вложения
Тип файла: rar NoKillConsole2.exe.rar (22.3 Кб, 11 просмотров)
3
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
03.01.2014, 21:37  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Это кто Вам такую ерунду подсказал ?
Не поверите Обработка закрытия консоли Там автор спрашивал о том, как запретить насильственное завершение приложения. Может быть он писал именно про окна, а не про консоль. Не знаю

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
xoror, лови нубское блокирование клоуза
Хорошая вещь. Эта блокировка не только кнопки закрытия, но и всей консоли. Спасибо

Интересно, можно как-нибудь эту кнопку закрытия вообще убрать на некоторое время а потом опять показать когда надо?

Добавлено через 7 минут
Цитата Сообщение от Убежденный Посмотреть сообщение
Используя данную функцию, вы можете задать свой обработчик событий консоли, в
том числе и обработчик завершения. Но система все равно прибьет процесс, если
через какое-то время после прихода сигнала завершения он не окончит работу.
Всё понятно

Добавлено через 5 минут
Все таки этот вариант лучше
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
* * BYTE pState;
* * HWND hWnd = GetForegroundWindow();
* * cout<<"Try to close me..;)"<<endl;
* * EnableWindow(hWnd, false);
* * GetKeyboardState(&pState);
* * while( true )
* * {
* * * * Sleep(100);
* * * * SetKeyboardState(&pState);
* * }
* * return 0;
}
Консоль можно закрыть только в диспетчере задач
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
03.01.2014, 22:01
Цитата Сообщение от xoror Посмотреть сообщение
Не поверите "Обработка закрытия консоли"
Читаем внимательно (из той темы):
Цитата Сообщение от nexen Посмотреть сообщение
необходимо обрабатывать события:
ctrl+C и крестик консоли, чтобы корректно завершить работу.
А теперь отсюда:
Цитата Сообщение от xoror Посмотреть сообщение
Как запретить закрытие консоли?
Подсказали, что для этого нужно использовать функцию SetConsoleCtrlHandler().
Два разных вопроса. Не находите ?
1
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
03.01.2014, 22:15  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Два разных вопроса. Не находите ?
Да я это уже понял. С помощью SetConsoleCtrlHandler() можно создать свой обработчик при закрытии, но программа все равно закроется, через 5 секунд или через другое время
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
03.01.2014, 22:41
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты осуществлял ввод, который я не блокировал
Можно и так:

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <windows.h>
#include <iostream>
using namespace std;
 
int main()
{
    HWND hWnd = GetForegroundWindow();
    cout<<"Try to close me..;)"<<endl;
    EnableWindow(hWnd, false);
   for(;;);
    return 0;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.01.2014, 22:41
Помогаю со студенческими работами здесь

закрытие консоли
в чем допущена оплошность:требуется ввести размер матрицы,вводим допустим 5,происходит вывод на экран,далее следует выбор: удалить одну...

Закрытие консоли
Дана непустая последовательность вещественных чисел оканчивающаяся числом 1000. Последовательность является неубывающей. Несколько...

Принудительное закрытие консоли
Доброго времени суток! У меня такой вопрос, мне нужно после выполнения определенного условия программа закрывалась, exit(0) не дает нужного...

Как запретить ввод слова "con" в консоли Visual Studio 2012
Всем добра! Написал программу для работы с символами, но есть одна проблема, что при вводе слова &quot;con&quot; программа ломается. Как...

Остановить закрытие консоли по завершению работы программы
Работая на вижуал студие.Проблемы с getch менял на system pause,ничерта... #include &quot;stdafx.h&quot; #include&lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru