31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
1

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

29.12.2013, 22:01. Показов 18153. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2013, 22:01
Ответы с готовыми решениями:

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

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

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

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

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

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

Не по теме:

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

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

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

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

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

Цитата Сообщение от xoror Посмотреть сообщение
Неужели никто не знает как это сделать?
Я знаю, но оно того не стоит, поверьте.
1
10 / 10 / 2
Регистрация: 10.09.2013
Сообщений: 136
Записей в блоге: 1
30.12.2013, 20:41 12
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
30.12.2013, 21:10 13
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 Кб, 30 просмотров)
Тип файла: rar NoKillConsole.exe.rar (36.1 Кб, 21 просмотров)
3
75 / 75 / 10
Регистрация: 26.02.2013
Сообщений: 224
30.12.2013, 23:00 14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
закрыть окно простыми средствами не открыв диспетчер задач либо не применив програмный Enable невозможно.
а почему у меня закрывается если любую кнопку нажать?
0
Заблокирован
Автор FAQ
31.12.2013, 01:10 15
Цитата Сообщение от Stella Посмотреть сообщение
а почему у меня закрывается если любую кнопку нажать?
- предположу не отработало
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
EnableWindow(hWnd, false);
также предположу что тест проводился на 8-ке. Интересно взглянуть на видео закрытия и да хотелось бы услышать параметры ОСи
2
Заблокирован
Автор FAQ
31.12.2013, 01:38 16
Лучший ответ Сообщение было отмечено как решение

Решение

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
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
03.01.2014, 21:37  [ТС] 17
Цитата Сообщение от Убежденный Посмотреть сообщение
Это кто Вам такую ерунду подсказал ?
Не поверите Обработка закрытия консоли Там автор спрашивал о том, как запретить насильственное завершение приложения. Может быть он писал именно про окна, а не про консоль. Не знаю

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
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
Ушел с форума
Эксперт С++
16452 / 7416 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
03.01.2014, 22:01 18
Цитата Сообщение от xoror Посмотреть сообщение
Не поверите "Обработка закрытия консоли"
Читаем внимательно (из той темы):
Цитата Сообщение от nexen Посмотреть сообщение
необходимо обрабатывать события:
ctrl+C и крестик консоли, чтобы корректно завершить работу.
А теперь отсюда:
Цитата Сообщение от xoror Посмотреть сообщение
Как запретить закрытие консоли?
Подсказали, что для этого нужно использовать функцию SetConsoleCtrlHandler().
Два разных вопроса. Не находите ?
1
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
03.01.2014, 22:15  [ТС] 19
Цитата Сообщение от Убежденный Посмотреть сообщение
Два разных вопроса. Не находите ?
Да я это уже понял. С помощью SetConsoleCtrlHandler() можно создать свой обработчик при закрытии, но программа все равно закроется, через 5 секунд или через другое время
0
Заблокирован
03.01.2014, 22:41 20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты осуществлял ввод, который я не блокировал
Можно и так:

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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2014, 22:41
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru