Witam. Dokładnie chodzi mi o to aby program rozpoznawał czynności wykonywane przez użytkownika związane z zamykaniem, restartem, hibernacją itp.

Mam taką procedure:

private
  procedure WMQueryEndSession(var Msg : TWMQueryEndSession); message WM_QUERYENDSESSION;

//...
procedure TOrganizer1.WMQueryEndSession(var Msg : TWMQueryEndSession);
var
  H : Thandle;
begin
  H := FindWindow(nil, PChar(Organizer1.Caption));
  if Msg.Msg = WM_QUERYENDSESSION then
  begin
    PostMessage(H, WM_QUIT, 0, 0);    // zamknięcie programu
    ExitWindows2;    // wyłączenie systemu lub jakaś inna procedura
  end;
end;