Главная страница
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.026 c
8-1096008775
Lexer
2004-09-24 10:52
2004.12.19
Иконки для кнопок


4-1099405772
DSKalugin
2004-11-02 17:29
2004.12.19
Как изменить частоту видеоадаптера?


4-1099475511
paa
2004-11-03 12:51
2004.12.19
Изменить значения в регистрах


3-1101203318
slaga
2004-11-23 12:48
2004.12.19
IBStoredProc проблемы с обновлением параметров


1-1102058321
dream
2004-12-03 10:18
2004.12.19
Проблема с TreeView