Нужно отследить момент завершения Windows, и, если пользователь собирается выключить компьютер - программа должна вывести диалог запроса. Если пользователь нажимает кнопку YES - разрешаем выключение, если NO - отменяем. С помощью VCL компонентов это делается элементарно:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin //Спрашиваем пользователя, если инициировано завершение работы. if MessageDlg('Вы уверены?', mtConfirmation, mbYesNoCancel, 0) = mrYes then CanClose := true //Разрешаем завершение работы. else CanClose := false; //Nе разрешаем завершение работы. end; Автор ответа:Mazenrat Взято с Vingrad.ru http://forum.vingrad.ru
Пример отслеживания завершения приложения написанного на чистом API:
program kvd;
uses Windows, Messages;
var hWnd: THandle; WndClass: TWndClass; Msg: TMsg;
function WindowProc(hWnd: THandle; uMsg, wParam, lParam: Integer): Integer; stdcall; begin Result:=0; case uMsg of WM_QUERYENDSESSION: Result := integer(false); WM_DESTROY: PostQuitMessage(0); else Result := DefWindowProc(hWnd, uMsg, wParam, lParam); end; end;