Главная страница
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.042 c
14-1101384711
Gektor
2004-11-25 15:11
2004.12.19
Посмотреть байт на осциллографе


1-1101912857
SergeyDon
2004-12-01 17:54
2004.12.19
получить координаты иконок на рабочем столе.


14-1101909282
Koala
2004-12-01 16:54
2004.12.19
Windows Server 2003 Security Guide


14-1101493824
Alexander Panov
2004-11-26 21:30
2004.12.19
consts.pas из Delphi3.


1-1101901985
tytus
2004-12-01 14:53
2004.12.19
Как скопировать 60 байт?