Главная страница
    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
15-1243497903
VirEx (work)
2009-05-28 12:05
2009.08.02
День программиста


3-1225350632
prisoner849
2008-10-30 10:10
2009.08.02
Как проапдейтить определенное поле в таблице?


2-1244170279
Саша
2009-06-05 06:51
2009.08.02
Создание и удаление объектов в Run-time


2-1244467602
Wind
2009-06-08 17:26
2009.08.02
Событие в Delphi


15-1243936751
Imag
2009-06-02 13:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский