![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Консольное приложение [D5, D7]
Deltas © (2009-05-29 18:06:00)Всем привет. Как запретить закрытие консольного окна по нажатию на кнопке "Закрыть"? SetConsoleCtrlHandler не предлагать, Windows XP закрывает консольное окно вместе с процессом через 5 секунд после нажатия, если процесс не завершился в течение этого времени.
Deltas (2009-06-05 19:12:00) [1]Ну хорошо, а любые другие варианты? Можно ли в собственном процессе запретить доступ PROCESS_TERMINATE и тем самым не дать системе через 5 секунд его терминировать?
Игорь Шевченко (2009-05-29 19:44:00) [2]
> К сожалению не работает. При попытке подменить оконную функцию
> SetWindowLong завершается с ошибкой. GetLastError возвращает
> код ошибки 5 (ERROR_ACCESS_DENIED).
csrss не любит, когда в его окнах что-то пытаются подменить.
Deltas (2009-05-29 19:13:00) [3]
> Юрий Зотов © (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:02:00) [4]> Плохиш © (29.05.09 18:50) [3]
Да, но, возможно, не сразу. Существуют программы, которые нельзя прерывать, где попало. И даже через 5 секунд.
> Deltas © (29.05.09 18:06)
Кстати, насколько помню, SetConsoleCtrlHandler позволяет перехватить Ctrl+C, а не закрытие окна. Если это так, то SetConsoleCtrlHandler тоже нужно, а не только перехват "крестика".
Плохиш (2009-05-29 18:50:00) [5]
> Как запретить закрытие консольного окна по нажатию на кнопке
> "Закрыть"?
Если я нажал на кнопку "Закрыть", то приложение должно закрыться. В противном случае оно летит мимо корзины и работа считается не выполненной.
Юрий Зотов (2009-05-29 18:35:00) [6]Возможно, Get/SetWindowLong?
В смысле - найти хэндл окна своей консоли и подменить его оконную функцию своей, а там ловить WM_SYSCOMMAND.
DVM (2009-05-29 18:14:00) [7]Сделать свою иммитацию консольного окна? Где то тут пробегало нечто подобное.