Главная страница
    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.075 c
15-1337286603
Юрий
2012-05-18 00:30
2013.03.22
С днем рождения ! 18 мая 2012 пятница


15-1339959786
Artem
2012-06-17 23:03
2013.03.22
Pocket Fritz


15-1344231937
картман
2012-08-06 09:45
2013.03.22
извините, пожалуйста, забыл


2-1331807216
selesasha
2012-03-15 14:26
2013.03.22
Поиск в массиве


2-1339503702
kurolesov
2012-06-12 16:21
2013.03.22
Работа с TBitmap. Как быстрее?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский