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