Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отключить закрытие программы. Отключение Alt+F4 
:(
    Опции темы
Oberon83
Дата 10.6.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: нет
Всего: 1



Каким образом можно сделать так, чтобы моя программа не закрывалась по сочетанию Alt+F4. Работаю в C++ Builder 6.
Следующий код не работает(хотя должен):
Код
 
//В обpаботчике FormKeyDown пишешь:
if (Shift.Contains(ssAlt)&&Key==VK_F4) Tag=1;

//В обpаботчике FormCloseQuery:
if(Tag)
{
CanClose=false;
Tag=0;
}

Никак не могу понять почему. Система - WinXP
Так же не работает отключение кнопок Свернуть и Минимизировать:
Код

      HMENU MenuHandle = GetSystemMenu(Handle, false);
if(MenuHandle){
  DeleteMenu(MenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);
  DeleteMenu(MenuHandle, SC_MINIMIZE, MF_BYCOMMAND);
  }

Тоже почему не знаю...
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
JoyEx
Дата 22.6.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 4
Всего: 12



Попробуйте сделать обработчик сообщения WM_CLOSE.

Это сообщение отредактировал(а) JoyEx - 22.6.2005, 23:00


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Любитель
Дата 22.6.2005, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Можно свой хот-кей кинуть.


--------------------
PM MAIL ICQ Skype   Вверх
En_t_end
Дата 23.6.2005, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Oberon83
Вопрос задан не корректно.
Отключить закрытие программы невозможно, потому что система всегда оставляет за собой право шутдаунить любой процесс. Юзать блокировку Alt-F4 - это по ламерски, извиняюсь за выражение.
Цитата
Можно свой хот-кей кинуть.

А прикинь, у него открыто ещё пять прилаг, и ему вдруг захотелось закрыть какую-то другую прогу, но нет из-за этого хот-кея сообщение будет посылаться именно этой проге и остальное не закроется, тем самым чел ощутит дисскомфорт.
JoyEx
Более реальный совет, но винды тоже не тупые, если ты сделаешь там что-то типа goto, то система все равно аварийно вырубит прилагу через определенный промежуток времени, прямо по середине какой-то работы, но то есть специальный таймаут.
PM MAIL ICQ Skype GTalk Jabber   Вверх
JoyEx
Дата 23.6.2005, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 4
Всего: 12



En_t_end

Если корректно, быстро обрабатывать WM_CLOSE от ALT+F4, то ВинниПух ничего плохого не сделает. Можно это делать примерно так на VC:
Код

void CHelloDlg::OnClose()
{
    if((GetKeyState(VK_MENU) >> 8) && (GetKeyState(VK_F4) >> 8)) return;

    CDialog::OnClose();
}


Главное, чтобы поток получивший WM_CLOSE от accelerators незамедлительно обработал это сообщение.

Можно еще глобально сделать: взять исходник .sys фильтра клавиатуры \WINDDK\.......\src\input\kbfiltr из DDK, добавить в него пару строк (запретить комбинации клавиш) и установить потом его в Windows. Только не просите меня сделать это за Вас сегодня.




--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
codelord
Дата 26.6.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 3
Всего: 39



А по моему все очень просто, берешь в параметре формы, если есть onClose, ставишь строку

Код

ShellExecute(Handle,NULL,ParamStr(0).c_str(),NULL,NULL,SW_RESTORE); 





--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Nemesis
Дата 30.6.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: нет
Всего: 5



В таком случае программа просто перезапустит себя.
Можно просто получив сообщение WM_CLOSE не передавать его системе, а заменить его скажем на WM_PRINT (портим окно и заставляем послать новое сообщение).
--------------------
PM MAIL   Вверх
oper54
Дата 30.6.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 13.5.2005

Репутация: нет
Всего: 1



Не долго мучаясь smile
ВОТ -
Код

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
 CanClose = false;
 return;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0867 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.