Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.08.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1244136802
sunrise13
2009-06-04 21:33
2009.08.02
Статус бар для программы читающей *.bmp файлы


15-1244110187
GEN++
2009-06-04 14:09
2009.08.02
Интересная (возможно) задача.


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


15-1243813516
dmk
2009-06-01 03:45
2009.08.02
Популярная математика


15-1243538953
Саша
2009-05-28 23:29
2009.08.02
как защитить программу от взлома?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский