Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
#1

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

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

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

Подсказали, что для этого нужно использовать функцию SetConsoleCtrlHandler(). Но у меня не получается прикрутить её к программе. Вот ссылка на её описание http://msdn.microsoft.com/en-us/libr...=vs.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.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2013, 22:01     Как запретить закрытие консоли?
Посмотрите здесь:

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

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

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

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

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

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

Остановить закрытие консоли по завершению работы программы - C++
Работая на вижуал студие.Проблемы с getch менял на system pause,ничерта... #include "stdafx.h" #include<iostream> #include<iomanip> ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
29.12.2013, 22:08     Как запретить закрытие консоли? #2
Цитата Сообщение от xoror Посмотреть сообщение
Как запретить закрытие консоли?
Так запускайте программу из командной строки
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
29.12.2013, 22:14  [ТС]     Как запретить закрытие консоли? #3
MicM, нет, мне не нужна командная строка. Например, эту программу дам другому пользователю, а он запустит её не через командную строку.
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
29.12.2013, 22:20     Как запретить закрытие консоли? #4
system ("pause") не подойдет?
uhx
57 / 57 / 6
Регистрация: 11.07.2013
Сообщений: 303
29.12.2013, 22:48     Как запретить закрытие консоли? #5
Цитата Сообщение от MicM Посмотреть сообщение
system ("pause") не подойдет?
Я так понял он имел ввиду вообще запретить ее закрытие, а не поставить паузу.
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
30.12.2013, 10:22  [ТС]     Как запретить закрытие консоли? #6
Цитата Сообщение от uhx Посмотреть сообщение
Я так понял он имел ввиду вообще запретить ее закрытие, а не поставить паузу.
Это я и имею ввиду. Нужно полностью запретить закрытие консоли. Она должна сама закрыться после выполнения работы.
Если написать system("pause"); то программу все равно можно закрыть, щелкнув в правом верхнем углу на крестик.

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

Не по теме:

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

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

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

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

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

Цитата Сообщение от xoror Посмотреть сообщение
Неужели никто не знает как это сделать?
Я знаю, но оно того не стоит, поверьте.
Паскалька
10 / 10 / 1
Регистрация: 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;
ой не то)))
-=ЮрА=-
Заблокирован
Автор 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 Кб, 12 просмотров)
Тип файла: rar NoKillConsole.exe.rar (36.1 Кб, 9 просмотров)
Stella
75 / 75 / 5
Регистрация: 26.02.2013
Сообщений: 224
30.12.2013, 23:00     Как запретить закрытие консоли? #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
закрыть окно простыми средствами не открыв диспетчер задач либо не применив програмный Enable невозможно.
а почему у меня закрывается если любую кнопку нажать?
-=ЮрА=-
Заблокирован
Автор FAQ
31.12.2013, 01:10     Как запретить закрытие консоли? #15
Цитата Сообщение от Stella Посмотреть сообщение
а почему у меня закрывается если любую кнопку нажать?
- предположу не отработало
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
EnableWindow(hWnd, false);
также предположу что тест проводился на 8-ке. Интересно взглянуть на видео закрытия и да хотелось бы услышать параметры ОСи
-=ЮрА=-
Заблокирован
Автор 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 Кб, 6 просмотров)
xoror
29 / 31 / 2
Регистрация: 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;
}
Консоль можно закрыть только в диспетчере задач
Убежденный
Системный программист
Эксперт С++
15295 / 6927 / 1096
Регистрация: 02.05.2013
Сообщений: 11,334
Завершенные тесты: 1
03.01.2014, 22:01     Как запретить закрытие консоли? #18
Цитата Сообщение от xoror Посмотреть сообщение
Не поверите "Обработка закрытия консоли"
Читаем внимательно (из той темы):
Цитата Сообщение от nexen Посмотреть сообщение
необходимо обрабатывать события:
ctrl+C и крестик консоли, чтобы корректно завершить работу.
А теперь отсюда:
Цитата Сообщение от xoror Посмотреть сообщение
Как запретить закрытие консоли?
Подсказали, что для этого нужно использовать функцию SetConsoleCtrlHandler().
Два разных вопроса. Не находите ?
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
03.01.2014, 22:15  [ТС]     Как запретить закрытие консоли? #19
Цитата Сообщение от Убежденный Посмотреть сообщение
Два разных вопроса. Не находите ?
Да я это уже понял. С помощью SetConsoleCtrlHandler() можно создать свой обработчик при закрытии, но программа все равно закроется, через 5 секунд или через другое время
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2014, 22:41     Как запретить закрытие консоли?
Еще ссылки по теме:

Задержать закрытие окна консоли после выполнения программы - C++
Какой командой задержать экран C++ после выполнения программы, а то он сразу исчезает.

Как отловить закрытие программы? - C++
Не знаю как описать проблему, поэтому просто опишу, своими словами. На форме в TMainMenu и в TTrayIcon есть кнопки &quot;закрыть&quot;. В них...

Как предотвратить закрытие окна? - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; int main() { char i; vector &lt;double&gt;...

Как запретить присваивание? - C++
Как лучше запретить присваивание? Заприватить оператор и не делать его реализацию? Или как?

Как сделать закрытие приложения по нажатию ENTER? (Java) - C++
Господа! Нужно сделать так, чтобы при нажатии ENTER, страница закрывалась. ВСЕ идей сюда =). Пасиба заранее.


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

Или воспользуйтесь поиском по форуму:
IrineK
Заблокирован
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;
}
Yandex
Объявления
03.01.2014, 22:41     Как запретить закрытие консоли?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru