![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выключение windows [D2005, 2003]
mops © (2009-10-02 15:58:00)Здравствуйте,
такая проблема, при выключении Windows, моя программа как-то прерывает ее и все приложения закрывается кроме моего :) Как это побороть? На CloseQuery стоит диалог типа "Выйти из программы?", но он не срабатывает.
sniknik (2009-10-05 15:59:00) [1]непонятно кто "убийца", шофер или дворецкий... никакое развитие сюжета, этого не заменят.
> посмотрел кто еще это может делать, потестировал - заработало.
Шерлок Холмс проверил еще раз подозреваемых, подумал - и нашел убийцу!
потрясающее завершение... только второй раз этого автора читать ну его нафиг.
mops (2009-10-05 15:42:00) [2]
> ну очень информативно и полезно... как детектив без последних
> страниц.
>
> мы конечно рады за тебя, что решил, но в гости больше не
> ждем...
а что тут непонятного? прочитай весь топик.
у меня не отлавливалось сообщение, посмотрел кто еще это может делать, потестировал - заработало.
sniknik (2009-10-05 15:30:00) [3]> решил проблему. спасибо.
ну очень информативно и полезно... как детектив без последних страниц.
мы конечно рады за тебя, что решил, но в гости больше не ждем...
mops (2009-10-05 15:00:00) [4]решил проблему. спасибо.
RWolf (2009-10-05 14:39:00) [5]значит, кто-то выловил его до этого.
> Windows stops sending WM_QUERYENDSESSION messages as soon
> as one application returns zero.
mops (2009-10-05 14:28:00) [6]WM_QUERYENDSESSION вообще не отлавливается
RWolf (2009-10-05 14:24:00) [7]предлагаю обработать WM_QUERYENDSESSION, вернуть TRUE, inherited обработчик не вызывать.
mops (2009-10-05 14:19:00) [8]:)
поменял на ноль. все закрылось, программа тоже закрылась, а папка откуда была запущена - нет. и винда нет.
RWolf (2009-10-05 14:13:00) [9]ну, раз уж я начал копипастить справку:
> If an application processes this message, it should return
> zero.
mops (2009-10-05 14:11:00) [10]
procedure TForm.CloseApp(var msg: TWMEndSession);
begin
msg.Result := -1;
inherited;
Close;
end;
Делаю так.
RWolf (2009-10-05 14:10:00) [11]Мое предположение — какой-то из компонентов программы неправильно обрабатывает сообщение WM_QUERYENDSESSION.
Сам с этим сталкивался пару раз.
RWolf (2009-10-05 14:07:00) [12]
> мм.. не доскажите как? )
опять же читаем справку:
> If any application returns zero, the Windows session is
> not ended.
mops (2009-10-05 14:07:00) [13]Нет
RWolf (2009-10-05 14:05:00) [14]Впрочем, я неправ — ловить WM_QUERYENDSESSION необязательно.
Наводящий вопрос: не использует ли программа компоненты Powersock или CoolTrayIcon?
mops (2009-10-05 14:03:00) [15]
> причём разрешить оси завершить работу
мм.. не доскажите как? )
RWolf (2009-10-05 13:58:00) [16]Справка собщает нам, что
> The WM_ENDSESSION message is sent to an application after
> Windows processes the results of the WM_QUERYENDSESSION
> message.
что означает, что, прежде чем ловить WM_ENDSESSION, неплохо бы словить WM_QUERYENDSESSION (причём разрешить оси завершить работу).
mops (2009-10-05 13:38:00) [17]ловлю WM_ENDSESSION и вызываю Close. Тогда программа закрывается, но Windows не выключается ) т.е. у меня открыто несколько программ, выключаю windows, все закрывается, моя спрашивает Выйти или нет, жму Да - закрывается, но windows остается включенным :(
mops (2009-10-02 16:10:00) [18]Может. Буду пробовать. Спасибо.
antonn (2009-10-02 16:04:00) [19]может WM_QUERYENDSESSION ловить
mops (2009-10-02 16:01:00) [20]
if MessageDlg()<>IDYES then
begin
CanClose := False;
Exit;
end;
...