![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сообщения при попытке завершения безоконного приложения
vertal © (2004-10-31 20:18:00)Есть приложение (GUI) на Delphi , где не создается форм и окон, но есть цикл выборки сообщений через GetMessage. Вопрос: какие сообщения ему должны посылаться при попытке завершить его через диспетчер задач? Иными словами , можно ли корректно обработать запрос на собственное завершение , не создавая при этом окон?
Digitman (2004-11-02 08:44:00) [1]
> vertal © (02.11.04 00:24) [5]
> есть ли способ как-то узнать о вызове TerminateProcess для
> уничтожения своего процесса для корректной обработки такой
> ситуации или это невозможно?
считай что невозможно.
гораздо проще сделать свое приложение сервисом, запускаемым от имени системы, тогда никакой TerminateProcess ему не страшен - снять твой процесс с выполнения может только сама система, любой же попытке юзера терминировать твой процесс будет дан отлуп.
vertal (2004-11-02 00:24:00) [2]> [4]
Ага , то есть дело не в оконной процедуре , а в функции TerminateProcess , которую использует диспетчер задач. А есть ли способ как-то узнать о вызове TerminateProcess для уничтожения своего процесса для корректной обработки такой ситуации или это невозможно?
DrPass (2004-11-02 00:14:00) [3]Дело в том, что когда процесс грохается через TerminateProcess, его никто не ставит в известность. Тем более, что диспетчер об этом честно честно предупреждает.
vertal (2004-11-01 22:18:00) [4]GetMessage нужен для выборки сообщений от глобальной горячей клавиши , установленной по
RegisterHotKey(0,MyAtom,MOD_CONTROL,Byte(vKeyCode) and $FF);
Сейчас запустил такую программу:
Uses windows,messages,sysutils;
Var
MyMsg:TMsg;
Begin
while GetMessage(MyMsg,0,0,0)do
Begin
MessageBox(0,PCHar(IntToStr(MyMsg.message)),Nil,0);
Beep;
sleep(10000);
End;
MessageBox(0,PCHar('Exit:'+IntToStr(MyMsg.message)),Nil,0);
beep();
sleep(10000);
End.
Программа вообще не пролучила никаких сообщений при ее завершении через диспетчер задач.Я склоняюсь к необходимости создания невидимого окна и в его оконной процедуре на сообщение WM_CLOSE отвечать PostQuitMessage , но может быть кто-нибудь подскажет более изящное решение?
Cobalt (2004-10-31 23:28:00) [5]2 DrPass © (31.10.04 23:11) [1]
Да ладно тебе, и так можно - в поток посылать.
2 vertal ©
По идее - WM_QUIT, хотя, можешь сам узнать - приложение-то у тя ведь есть?
DrPass (2004-10-31 23:11:00) [6]??? Если там нет ни форм, ни окон - куда твой GetMessage выбирает сообщения? В воздух?