Вниз
Скачать: CL | DM;

Сообщения при попытке завершения безоконного приложения   Найти похожие ветки 

 
vertal ©   (2004-10-31 20:18) [0]

Есть приложение (GUI) на Delphi , где не создается форм и окон, но есть цикл выборки сообщений через GetMessage. Вопрос: какие сообщения ему должны посылаться при попытке завершить его через диспетчер задач? Иными словами , можно ли корректно обработать запрос на собственное завершение , не создавая при этом окон?


 
DrPass ©   (2004-10-31 23:11) [1]

??? Если там нет ни форм, ни окон - куда твой GetMessage выбирает сообщения? В воздух?


 
Cobalt ©   (2004-10-31 23:28) [2]

2 DrPass ©   (31.10.04 23:11) [1]
Да ладно тебе, и так можно - в поток посылать.

2 vertal ©
По идее - WM_QUIT, хотя, можешь сам узнать - приложение-то у тя ведь есть?


 
vertal ©   (2004-11-01 22:18) [3]

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 , но может быть кто-нибудь подскажет более изящное решение?


 
DrPass ©   (2004-11-02 00:14) [4]

Дело в том, что когда процесс грохается через TerminateProcess, его никто не ставит в известность. Тем более, что диспетчер об этом честно честно предупреждает.


 
vertal ©   (2004-11-02 00:24) [5]

> [4]
Ага , то есть дело не в оконной процедуре , а в функции TerminateProcess , которую использует диспетчер задач. А есть ли способ как-то узнать о вызове TerminateProcess для уничтожения своего процесса для корректной обработки такой ситуации или это невозможно?


 
Digitman ©   (2004-11-02 08:44) [6]


> vertal ©   (02.11.04 00:24) [5]



> есть ли способ как-то узнать о вызове TerminateProcess для
> уничтожения своего процесса для корректной обработки такой
> ситуации или это невозможно?


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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.032 c
1-1102150083
Bobby Digital
2004-12-04 11:48
2004.12.19
F1


1-1101980982
PURGEN
2004-12-02 12:49
2004.12.19
Tedit


1-1102255656
Andrick
2004-12-05 17:07
2004.12.19
Создание конструктора класса


3-1100608109
Tor
2004-11-16 15:28
2004.12.19
из dbf в txt через TADODataSet


8-1095298644
Ozone
2004-09-16 05:37
2004.12.19
Обход контура в BitMap




   Наверх