Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Какие системные сообщения приходят приложению, при его закрытии? [D5, Win95/98, Win2k]


TankMan ©   (2002-11-25 22:08:00) 

Сабж.. но уточню... какое сообщение приходит при "убитии процесса" (TerminateProcess), и просто при выходе из приложения... и самое главное, как сделать обработчик этих событий,... вобщем проблема стоит в том, что мне ну просто позарез, обязательно, и без исключений, нужно, чтобы при завершении моей программы,т.е. при получении такой команды, она выполняла ряд действий, а потом уж и закрывалась...


TankMan   (2002-12-10 00:07:00) [1]

погодите-те при TerminateProcess явно WM_DESTROY не посылается... только что проверил...
А вот вопрос созник, как сделать так, чтобы при получении сообщения WM_DESTROY, программка моя не закрылась? я знаю, что отлавливают сообщение WM_SYSCOMMAND или что-то в этом роде, и в wParam уже смотрят SC_CLOSE, но прикол в том, что когда программка вырубается Application.Terminate, это сообшение просто не приходит с таким параметром... а парметра SC_DESTROY нету к сожалению (насколько я знаю, и насколько я понял). Вобщем можно как нибудь "отменить" WM_DESTROY?


Arkan   (2002-11-30 15:40:00) [2]

хм, народ, т.е. если у меня приложение без формы, то я никак не отловлю его закрытие?


Fantasist   (2002-11-30 03:21:00) [3]


> При TerminateProcess никаких уведомлений процессу не посылается
> (AFAIK)


WM_DESTOY посылается окнам. Проверенно в win98.


rasen   (2002-11-28 11:44:00) [4]

Это все интересно про терминате процесс - но вот у меня пробл, что еть прога которая при посылке терминате процесс выдает диалог закрытия (А вы уверены, что хотите выйти?) - и обойти это никак не могу :((((
Мож кто-че посоветует ?????


TankMan   (2002-11-26 19:30:00) [5]

Да нет я получил ответ, который я хотел, больше мне ничего не нужно...


vaneks   (2002-11-26 13:50:00) [6]

При закрытии формы delphi пораждает еще onCloseQuery, но только в том случае если та недал ей закрыть форму в onClose.


Игорь Шевченко   (2002-11-26 13:21:00) [7]

Нет таких приложений, которые никак не убиваются...По крайней мере, если речь идет о NT-системах. В потребительских Windows я не знаю, что происходит...


TankMan   (2002-11-26 13:09:00) [8]

>>Morfein
Спасибо... щас попробую...

>>Игорь Шевченко
Жаль что при убити процесса ничего не посылается... а еще один вопрос... а почему некоторые приложения, при их зависании, не убиваются никак? или это просто из-за збоя в коде самого приложения?


Игорь Шевченко   (2002-11-26 12:14:00) [9]

При TerminateProcess никаких уведомлений процессу не посылается (AFAIK)

Terminating a process causes the following:

1. All of the object handles opened by the process are closed.
2. All of the threads in the process terminate their execution.
3. The state of the process object becomes signaled, satisfying any threads that had been waiting for the process to terminate.
4. The states of all threads of the process become signaled, satisfying any threads that had been waiting for the threads to terminate.
5. The termination status of the process changes from STILL_ACTIVE to the exit value of the process.


Morfein   (2002-11-26 10:15:00) [10]

private
procedure OnFormExit(var Msg : TMessage); message WM_EXIT;
end;

...
...

procedure Tform1.OnFormExit(var Msg : TMessage);
begin
MessageBox(0, "Это окно появляется в ответ на сообщение WM_EXIT", nil, 0);
end;


TankMan   (2002-11-26 03:26:00) [11]

нет я о сообщениях WM_CLOSE WM_EXIT кажись так... вот как их обрабатывать?


Cobalt   (2002-11-26 00:20:00) [12]

>>Но когда главное окно будет убито, будет уже поздно
можно данные хранить в Мап-файле, тогда они сохранятся, и хук, выгружаясь, сделает своё "тёмное дело" ;)
Если ты о сообщениях OnClose, OnDestroy, то смотри события формы.


TankMan   (2002-11-25 23:12:00) [13]

>>Cobalt
Но когда главное окно будет убито, будет уже поздно...

Нет мне именно эти сообщения нужно отлавливать, а как?


Cobalt   (2002-11-25 23:02:00) [14]

В таких случаях рекомендуют ставить хук - при убитии "главной" проги (которая поставила хук), ДЛЛ-ка хука выгружается, и, при выгрузке, можно проверить наличие проги - убита она или нет? (напр., есть ответ от главного окна или нет)


esu   (2002-11-25 22:55:00) [15]

Если просто при выходте то смотри OnClose, OnDestroy. А вот TerminateProcess боюсь тебе ничего не пошлет :(


Наверх

Титульная страница Поиск, карта сайта Написать письмо