Zablokowanie próby zamknięcia systemu lub wylogowania

Aby zablokować próbę zamknięcia systemu lub wylogowania się z niego należy przechwycić komunikat zamknięcia systemu i odpowiednio go obsłużyć.

W pliku nagłówkowym głównego formularza za sekcją public, a przed końcem deklaracji klasy umieścić mapę komunikatu przechwytującą komunikat WM_QUERYENDSESSION wysyłany przy próbie zamknięcia systemu lub przy próbie logowania:

Unit1.h

BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_QUERYENDSESSION, TWMQueryEndSession, OnQueryEndSession);
END_MESSAGE_MAP(TForm)

W sekcji private umieścić deklarację funkcji OnQueryEndSession obsługującej nasze zdarzenie:

Unit1.h

private:
   void __fastcall OnQueryEndSession (TWMQueryEndSession& Message);

A w pliku głównym formularza tworzymy funkcję obsługującą nasze zdarzenie:

Unit1.cpp

void __fastcall TForm1::OnQueryEndSession(TWMQueryEndSession& Message)
{
   ShowMessage("Nie wolno zamknąć systemu !!!");
   Message.Result = 0;
}

Gdyby zamiast Message.Result = 0; (zakaz zamknięcia systemu lub logowania użytkownika) umieścić Message.Result = 1; to system zostałby zamknięty lub użytkownik wylogowany.