DELPHI FAQ: Как отследить завершение работы в приложении?


Как отследить завершение работы в приложении?
Previous  Home  Next


Нужно отследить момент завершения 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
;

begin

 FillChar(WndClass, SizeOf(WndClass), 0
);
  with
 WndClass do begin
   hInstance      := SysInit.hInstance;
   lpszClassName  := 'dd'
;
   lpfnWndProc    := @WindowProc;
  end
;
   RegisterClass(WndClass);
  hWnd := CreateWindow('dd'
''0000000, hInstance, NIL);
  if
 hWnd = 0 then
   Exit;
  ShowWindow(hWnd, SW_HIDE);
  while
 GetMessage(Msg, 000do begin
   TranslateMessage(Msg);
   DispatchMessage(Msg);
  end
;
end
.

Автор ответа: Fantasist
Взято с Vingrad.ru http://forum.vingrad.ru




DELPHI FAQ




EOMY TOP 100      Рейтинг@Mail.ru      Rambler's Top100