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

Previous  Top  Next

    
 

 

Нужно отследить момент завершения Windows, и, если пользователь собирается выключить компьютер - программа должна вывести диалог запроса. Если пользователь нажимает кнопку YES - разрешаем выключение, если NO - отменяем. С помощью VCL компонентов это делается элементарно:

 

Code:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

//Спрашиваем пользователя, если инициировано завершение работы.

if MessageDlg('Вы уверены?', mtConfirmation, mbYesNoCancel, 0) = mrYes

then CanClose := true   //Разрешаем завершение работы.

else CanClose := false; //Nе разрешаем завершение работы.

end;

 

 

 

Автор ответа: Mazenrat

©Drkb::04565

Взято с Vingrad.ru http://forum.vingrad.ru


 

Пример отслеживания завершения приложения написанного на чистом API:

 

Code:

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', '', 0, 0, 0, 0, 0, 0, 0, hInstance, NIL);

if hWnd = 0 then

  Exit;

ShowWindow(hWnd, SW_HIDE);

while GetMessage(Msg, 0, 0, 0) do begin

  TranslateMessage(Msg);

  DispatchMessage(Msg);

end;

end.

 

 

©Drkb::04566

Автор: Fantasist

Взято с Vingrad.ru http://forum.vingrad.ru