Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: 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 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
3-1101113787
31512
2004-11-22 11:56
2004.12.19
TDBComboBox - баг или так задумано?


1-1102435699
yanker
2004-12-07 19:08
2004.12.19
Сохранение экземляра класса в файл


6-1097097094
Jeka
2004-10-07 01:11
2004.12.19
FTP протокол


1-1102024978
Shnabs
2004-12-03 01:02
2004.12.19
Графика


8-1095532400
Sulimxar
2004-09-18 22:33
2004.12.19
Помогите понять Битрейт