Para seu programa executar uma tarefa quando o usuário tiver clicado em
Desligar Computador (ou Reiniciar, qualquer coisa do tipo), primeiramente vá
na seção private da declaração de classe na unit do form principal e digite
a seguinte linha:

procedure WMEndSession (var Msg : TWMEndSession); message WM_ENDSESSION;

Depois, na seção implementation da unit, digite a seguinte rotina:

procedure TNomeDoForm.WMEndSession (var Msg : TWMEndSession);
begin
if Msg.EndSession = TRUE then
FazAlgo; // Aqui você faz o que tem que fazer
inherited;
end;


FONTE: http://www.guiadodelphi.com.br/ler.php?codigo=667