Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.065 c
15-1350725654
Anrey
2012-10-20 13:34
2013.03.22
Трассировка+замер скорости+отправка отчета


15-1328645259
Artem
2012-02-08 00:07
2013.03.22
Как проверить что тип TreeNode^ имеет "нулевое значение"?(C++)


15-1350918593
Artem
2012-10-22 19:09
2013.03.22
Как защититься? Не очень разбираюсь.


2-1337760388
yuiyui
2012-05-23 12:06
2013.03.22
ctrl + i не работает


11-1243804218
igg
2009-06-01 01:10
2013.03.22
Меню под WinCE - это баг?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский