Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

WM_ENDSESSION и Win7   Найти похожие ветки 

 
istok   (2009-10-21 15:21) [0]

WM_EndSession не ловится в win7, а в xp ловится. Код представлен ниже:


type
 TMyForm = class(TForm)
...
private
...
   procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION;
...
procedure TMyForm.WMEndSession(var Msg: TWMEndSession);
begin
 AddLog("WMEndSession");
 if Msg.EndSession = True then
 begin
   //call my app destructors
   halt;
 end;
 inherited;
end;


как же обрабатывать logoff\sutdown в win7 чтобы вызывать свои деструкторы?


 
clickmaker ©   (2009-10-21 15:43) [1]

> чтобы вызывать свои деструкторы?

а мужики-то пишут-пишут и не знают, что обработчик WM_ENDSESSION - это, оказывается, единственное место для вызова деструкторов...


 
istok   (2009-10-21 15:52) [2]

а я и не утверждал, что это единственное место, но других не знаю. queryendsession насколько я понимаю не подходит, что вы посоветуете?


 
clickmaker ©   (2009-10-21 15:57) [3]

TForm.OnDestroy


 
TIF ©   (2009-10-21 15:58) [4]

По-моему правильнее сначала ловить WM_QUERYENDSESSION, вернуть на это сообщение системе ответ TRUE, а уже только потом дождаться WM_ENDSESSION и сворачивать свою деятельность


 
istok   (2009-10-21 16:04) [5]


> TIF ©   (21.10.09 15:58) [4]
>
> По-моему правильнее сначала ловить WM_QUERYENDSESSION, вернуть
> на это сообщение системе ответ TRUE, а уже только потом
> дождаться WM_ENDSESSION и сворачивать свою деятельность


а мне нет смысла ловить WM_QUERYENDSESSION

мне надо обработать закрытие приложения, при логофе\шатдауне. есть известный косяк с невызовом деструкторов, описанный например здесь: http://www.delphifaq.com/faq/delphi/vcl/f285.shtml


 
istok   (2009-10-21 16:10) [6]


> clickmaker ©   (21.10.09 15:57) [3]
>
> TForm.OnDestroy


дык не катит, по крайней мере в D7.  в предыдущем посте это описано..


 
clickmaker ©   (2009-10-21 16:11) [7]

> известный косяк с невызовом деструкторов

какой смысл перед смертью чистить зубы, а?


 
istok   (2009-10-21 16:48) [8]


> какой смысл перед смертью чистить зубы, а?


такой, что программа перед своим закрытием должна кое-чего сделать согласно своей бизнес логике. но деструкторы не вызываются, события в вин7 не ловятся. и как это сделать в вин7 - пока непонятно..   в xp проблем нет.


 
clickmaker ©   (2009-10-21 17:03) [9]

и OnDestroy и OnClose даже не вызывается?


 
istok   (2009-10-21 21:43) [10]

угу, оба не вызываются, по крайней мере не пишет соответствующий лог в файл.
а при закрытии руками - пишет..


 
robot ©   (2009-11-24 22:08) [11]

Если еще нужно:

procedure TForm1.FormCreate(Sender: TObject);
begin
  FWndHandle := Classes.AllocateHWnd(WndProc);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Classes.DeallocateHWnd(FWndHandle);
end;

procedure TForm1.WndProc(var Msg: TMessage);
begin
  if Msg.Msg = WM_ENDSESSION then
     Halt
  else
    Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;

Как-то так.


 
Игорь Шевченко ©   (2009-11-24 22:14) [12]

А тебе ж там написали, болезному:

"the only reliable way
of handling the WM_ENDSESSION is to use the HookWindow method of
Application."

даже пример привели.


 
robot ©   (2009-12-02 19:26) [13]


> Игорь Шевченко ©


Сам-то проверял?

Интересуюсь, т.к. для меня вопрос важен.

Приведенный мной способ работает на win7 x64, 2008 r2 x64, d2007.

Вдруг упустил чего.


 
Leonid Troyanovsky ©   (2009-12-02 23:51) [14]


> robot ©   (02.12.09 19:26) [13]

> Вдруг упустил чего.

У MS спросить надо.

Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
15-1331654585
Unknown user
2012-03-13 20:03
2013.03.22
Альтернатива GetTickCount


2-1341059064
Начинающий41
2012-06-30 16:24
2013.03.22
DBEDIT


15-1331704846
CrytoGen
2012-03-14 10:00
2013.03.22
Менеджеры памяти для 64 bit


6-1264712145
Vatokat
2010-01-28 23:55
2013.03.22
Обработка исключительных ситуаций indy в потоке


15-1334758815
аноним
2012-04-18 18:20
2013.03.22
Посоветуйте смартфончик