Вниз
Скачать: CL | DM;

Консольное приложение   Найти похожие ветки 

← →
Deltas ©   (2009-05-29 18:06) [0]

Всем привет. Как запретить закрытие консольного окна по нажатию на кнопке "Закрыть"? SetConsoleCtrlHandler не предлагать, Windows XP закрывает консольное окно вместе с процессом через 5 секунд после нажатия, если процесс не завершился в течение этого времени.


← →
DVM ©   (2009-05-29 18:14) [1]

Сделать свою иммитацию консольного окна? Где то тут пробегало нечто подобное.


← →
Юрий Зотов ©   (2009-05-29 18:35) [2]

Возможно, Get/SetWindowLong?

В смысле - найти хэндл окна своей консоли и подменить его оконную функцию своей, а там ловить WM_SYSCOMMAND.


← →
Плохиш ©   (2009-05-29 18:50) [3]


> Как запретить закрытие консольного окна по нажатию на кнопке
> "Закрыть"?

Если я нажал на кнопку "Закрыть", то приложение должно закрыться. В противном случае оно летит мимо корзины и работа считается не выполненной.


← →
Юрий Зотов ©   (2009-05-29 19:02) [4]

> Плохиш ©   (29.05.09 18:50) [3]

Да, но, возможно, не сразу. Существуют программы, которые нельзя прерывать, где попало. И даже через 5 секунд.

> Deltas ©   (29.05.09 18:06)  

Кстати, насколько помню, SetConsoleCtrlHandler позволяет перехватить Ctrl+C, а не закрытие окна. Если это так, то SetConsoleCtrlHandler тоже нужно, а не только перехват "крестика".


← →
Deltas ©   (2009-05-29 19:13) [5]


> Юрий Зотов ©   (29.05.09 18:35) [2]

К сожалению не работает. При попытке подменить оконную функцию SetWindowLong завершается с ошибкой. GetLastError возвращает код ошибки 5 (ERROR_ACCESS_DENIED).


> Юрий Зотов ©   (29.05.09 19:02) [4]


> Кстати, насколько помню, SetConsoleCtrlHandler позволяет
> перехватить Ctrl+C, а не закрытие окна.

Да, SetConsoleCtrlHandler позволяет обрабатывать 5 событий: Ctrl + C, Ctrl + Break, нажатие кнопки "Закрыть", выход пользователя из системы, завершение работы Windows. Эту функцию Win API я использую для корректной обработки Ctrl + C, она тоже нужна, но для обработки закрытия окна не подходит.


← →
Игорь Шевченко ©   (2009-05-29 19:44) [6]


> К сожалению не работает. При попытке подменить оконную функцию
> SetWindowLong завершается с ошибкой. GetLastError возвращает
> код ошибки 5 (ERROR_ACCESS_DENIED).


csrss не любит, когда в его окнах что-то пытаются подменить.


← →
Deltas ©   (2009-06-05 19:12) [7]

Ну хорошо, а любые другие варианты? Можно ли в собственном процессе запретить доступ PROCESS_TERMINATE и тем самым не дать системе через 5 секунд его терминировать?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
2-1244237871
Цукор5
2009-06-06 01:37
2009.08.02
TWebBrowser получение элементов формы


3-1225096677
dolmat
2008-10-27 11:37
2009.08.02
Количество месяцев


4-1213778010
incm
2008-06-18 12:33
2009.08.02
Как в главном окне перехватывать сообщения WM_MDICREATE и т.п.


15-1244017354
oldman
2009-06-03 12:22
2009.08.02
Как узнать предыдущий активный контрол?


2-1238673155
bagos
2009-04-02 15:52
2009.08.02
Реальные данные вместо ссылок




   Наверх