Как отследить завершение работы в приложении? |
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