Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизСообщения при попытке завершения безоконного приложения Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c