"The End"

W WindowsXP zamkniecie aplikacji bylo proste. System wysylal WM_QUERYENDSESSION i jak dostal odpowiedz TRUE – konczyl jej dzialanie. Z wielu róznych powodów mógl otrzymac odpowiedziedz FALSE, na przyklad w sytuacji, gdy program nagrywajacy dane na plyte, w czasie pracy informowal, ze wylaczenie go jest niedozwolone. Microsoft zalecal, aby aplikacje projektowane byly tak, zeby odmowa zamkniecia wiazala sie z poinformowaniem uzytkownika o przyczynie.
Problem pojawial sie w sytuacji, kiedy na komunikat WM_QUERYENDSESSION nie zostala udzielona w ciagu 5s zadna odpowiedz. System WindowsXP pokazywal wtedy uzytkownikowi okienko, ze aplikacja nie odpowiada i pomocne pytanie, ze moze warto zamknac aplikacje bez jej zgody. Tymczasem, zwlekanie z odpowiedzia przez aplikacje moze wynikac nie z jej niestabilnosci czy zlego zaprojektowania. Po prostu, odpowiedz czy zamkniecie jest dozwolone moze byc zalezna od decyzji uzytkownika. Wtedy aplikacja czeka na uzytkownika, system daje 5s na odpowiedz i mimo, ze uzytkownik jeszcze sie zastanawia - pyta pomocnie, czy mu nie ulatwic decyzji podsuwajac kuszacy przycisk „End Now”.

Efekty widzial kazdy, kto próbowal zamknac system WindowsXP z otwartym notepadem. Notepad pyta czy zapisac zmiany a Windows nie doczekawszy sie przez 5s odpowiedzi czy aplikacja godzi sie na zamkniecie, sugeruje, ze moze zabic notepada na sile.
System musi byc brutalny, bo nie istnieje zadna droga powiadomienia go, dlaczego wlasciwie aplikacja nie pozwolila na zamkniecie. Veto! I tyle.

Przy otwartych 10 notepadach? Wylaczenie komputera wiazac bedzie sie z dziesiecioma odpowiedziami.
Przy aplikacji zglaszajacej veto bez powiadomienia uzytkownika? Komputer po prostu nie daje sie wylaczyc.
Jeszcze ciekawiej jest, jezeli wylaczenie jest blokowane przez aplikacje nie majaca widocznych okien: najpierw nie dzieje sie nic, po czym nagle pojawia sie dziwaczny komunikat od systemu, ze musi zabic aplikacje taka jak tphkmgr czy onenotem, która choc istotna dla dzialania komputera, nigdy sie uzytkownikowi na ekranie nie pojawia. Pomijajac kwestie wygody i szybkosci zamykania komputera, takie komunikaty moga nieco denerwowac i spowodowac rozpoczecie zupelnie niepotrzebnego polowania na robaki i wirusy.

W Windows Vista wyglada to troche inaczej.

Po pierwsze:
Jezeli dziala jakas aplikacja wstrzymujaca shutdown, system duzo wyrazniej (calym czarnym ekranem) pokazuje zapytanie uzytkownikowi a dodatkowo wykrywa i wyjasnia sytuacje, kiedy wstrzymanie wynika z winy wiecej niz jednej aplikacji.

Po drugie:
Uzytkownik ma mozliwosc wymuszenia zamkniecia systemu "na sile", razem ze wszystkimi aplikacjami. Aplikacje te sa w takiej sytuacji powiadamiane o takiej decyzji uzytkownika przy pomocy flagi ENDSESSION_FORCEFULSHUTDOWN. Aplikacja "wie" wtedy co sie dzieje i moze zapisac dane na przyklad w pliku tymczasowym albo wykonac jakas inna operacje przewidziana przez programistów.

Po trzecie:
Aplikacje nie moga skutecznie zabronic wylaczenia systemu. Nawet jezeli spróbuja i nic nie wyswietla - Windows Vista powie uzytkownikowi w czym jest problem.

Po czwarte:
Zabronienie wylaczenia aplikacji moze wiazac sie z podaniem przyczyny. Aplikacja, która ma zamiar wstrzymac swoje zamkniecie rejestruje w systemie informacje na temat powodu veta. Sluzy do tego funkcja ShutdownBlockReasonCreate.
W takiej sytuacji, Windows Vista pytajac uzytkownika o zabicie programu, równoczesnie moze poinformowac, co o calej sytuacji ma do powiedzenia sam winny.

Po piate:
Aplikacja, która nie wyswietla okien na ekranie i nic nie mówi o swoim dzialaniu nie ma prawa wstrzymac zamkniecia systemu. Powód jest prosty. Skoro taka aplikacja nie ma GUI, to nie spyta uzytkownika o decyzje. Skoro uzytkownik kazal zamknac system, to wie co robi. W takiej sytuacji veto od niewidzialnej aplikacji nie jest dozwolone. Windows zabija ja niezaleznie od odpowiedzi (lub jej braku) na wyslane WM_QUERYENDSESSION. Wyjatkiem sa niewidoczne aplikacje, które zarejestrowaly powód wstrzymania (patrz punkt powyzej). Skoro aplikacja podaje przyczyne, to warto ja uzytkownikowi podac i zapytac o ostateczna decyzje.

Komu ta wiedza potrzebna? Przeciez to tylko dla programistów....
Otóz niekoniecznie. Z jednej strony zmiany w zamykaniu systemu i zabijaniu aplikacji pokazuja wyraznie, ze Vista to nie tylko taki XP z Aero, z drugiej - po prostu lepiej i milej pracuje sie w systemie, o którym wiadomo jak w srodku dziala.

Autor: Grzegorz Tworek