Możesz przeczytać o zmianach wprowadzonych w Vista here. Naprawdę powinieneś bardzo uważnie przeczytać ten artykuł.
Interfejsy API, których szukasz, to: ShutdownBlockReasonCreate
, ShutdownBlockReasonDestroy
i ShutdownBlockReasonQuery
. Pamiętaj, że te interfejsy API są dostępne tylko na serwerze Vista/2008. Będziesz musiał zaimplementować funkcję wycofania w 2000/XP.
Jeśli musisz zablokować zamknięcie, zadzwoń pod numer ShutdownBlockReasonCreate
, przekazując uchwyt do głównego okna i powód jako ciąg znaków. Ten ciąg znaków jest wyświetlany w zablokowanym oknie dialogowym zamknięcia, tj. "1 maszyna wirtualna jest używana" na zrzucie ekranu.
Jeśli zakończy się operacja blokująca zamykanie, zadzwoń pod numer ShutdownBlockReasonDestroy
.
Pamiętaj, że musisz nadal implementować WM_QUERYENDSESSION
, aby wszystkie elementy pasowały do siebie. Jest to część, która faktycznie blokuje zamknięcie.
Na XP powinieneś także odpowiedzieć na WM_ENDSESSION
, a jeśli Twoja aplikacja blokowała wyłączanie, uprzejmie jest wyświetlać komunikat z informacją, dlaczego. Jeśli tego nie zrobisz, użytkownik pozostawi drapanie w głowie, dlaczego komputer ignoruje instrukcję wyłączenia.
Wiem, że przy użyciu polecenia shutdown w linii poleceń można określić niestandardowe komunikaty o wyłączeniu do wyświetlenia, może to jest powiązane? – stijn