Autor Téma: WM_QUERYENDSESSION  (Přečteno 3413 krát)

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1144
  • Karma: 29
    • Verze Delphi: XE8, Sydney
WM_QUERYENDSESSION
« kdy: 09-08-2012, 09:36:44 »
Ahoj
jen hloupá otázka,

Kód: Delphi [Vybrat]
  1. procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;

vykoná se před OnClose nebo až před OnDestroy?

Dík

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:WM_QUERYENDSESSION
« Odpověď #1 kdy: 09-08-2012, 10:38:24 »
Měla by samozřejmě ještě před OnClose, jak z logiky věci (uživatel může v téhle fázi ještě zavření zrušit), tak z logiky kódu (když se koukneš, co WMQueryEndSession dělá, tak mimo jiné zavolá OnCloseQuery, což dosud vždycky bylo před OnClose). Proč, máš nějaký důvod se domnívat, že se to volá až po OnClose?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:WM_QUERYENDSESSION
« Odpověď #2 kdy: 09-08-2012, 10:42:20 »
jen hloupá otázka,
Kód: Delphi [Vybrat]
  1. procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
vykoná se před OnClose nebo až před OnDestroy?
Z principu by se mela vyskytnout pred. Jinak matne si vzpominam, ze pri nejakem vynucenem ukonceni aplikace - tusim WM_QUIT - se OnClose vubec nevola - mam dojem, ze rovnou opusti message loop a jde delat destroy (melo by to byt videt ve forms).

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1144
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:WM_QUERYENDSESSION
« Odpověď #3 kdy: 09-08-2012, 11:01:20 »
Moc děkuji.

Ale blbě jsem se zeptal a taky hledal chybu jinde, omlouvám se.

Můj problémek je následující.

Na serveru se vytvoří instance uživatele, a ten se odhlásí (něco jako remote desktop), když se odhlásí tj. jeho instance, windows běží dál, tak aplikace na jeho desktopu se uzavřou. a moje ne, protože já číhal na WM_QUERYENDSESSION resp. WM_QUERYSESSION.

Jak tedy zareagovat na uzavření desktopu?

Děkuji

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:WM_QUERYENDSESSION
« Odpověď #4 kdy: 09-08-2012, 11:16:07 »
protože já číhal na WM_QUERYENDSESSION resp. WM_QUERYSESSION.

No otestujes si LPARAM, jestli jde o log-off nebo shutdown a pokud je tvoje aplikace ready pro ukonceni, tak na WM_QUERYENDSESSION vratis TRUE, na WM_ENDSESSION bys mel aplikaci chcipnout.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1144
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:WM_QUERYENDSESSION
« Odpověď #5 kdy: 09-08-2012, 13:27:58 »
Díky moc, nějak mě zmátnul parametr TWMQueryEndSession

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:WM_QUERYENDSESSION
« Odpověď #6 kdy: 09-08-2012, 13:50:17 »
Díky moc, nějak mě zmátnul parametr TWMQueryEndSession

Nejsi prvni... Jak ses k tomu silenymu typu vubec dostal?

Ta unit Messages je IMHO ukazkou, jak Borland plytval svoje sily: dokumentaci k tomu stejne nikdy nenapsal a jedina rozumna dokumentace k systemu zprav je stejne jenom platform SDK  a tam MS pouziva  WPARAM, LPARAM apod., takze nejlepsi je pouzivat vsude jen TMessage, ktera je v souladu s SDK a moudra hledat tam.