Code:

unit Unit1;

{©Drkb v.3}

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs;

 

type

TForm1 = class(TForm)

   procedure FormCreate(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

   FSystemShutdown: Boolean;

   procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

function SetPrivilege(PrivilegeName: String; AEnabled: Boolean): Boolean;

var

TPPrev, TP: TTokenPrivileges;

Token: THandle;

dwRetLen: DWORD;

begin

Result := False;

if OpenProcessToken(GetCurrentProcess,

   TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then

try

   if LookupPrivilegeValue(nil, PChar(PrivilegeName),TP.Privileges[0].LUID) then

   begin

     TP.PrivilegeCount := 1;

     if AEnabled then

       TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED

     else

       TP.Privileges[0].Attributes := 0;

     dwRetLen := 0;

     Result := AdjustTokenPrivileges(Token, False, TP,

       SizeOf(TPPrev), TPPrev, dwRetLen);

   end;

finally

   CloseHandle(Token);

end

else

   RaiseLastOSError;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

const

SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';

begin

FSystemShutdown := False;

if not SetPrivilege(SE_SHUTDOWN_NAME, True) then

   RaiseLastOSError;

end;

 

procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);

begin

inherited;

Message.Result := 0;

AbortSystemShutdown(nil);

FSystemShutdown := True;

Close;

end;

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

ShowMessage('Bla...bla...bla!');

if FSystemShutdown then

   InitiateSystemShutdown(nil, nil, 0, True, False);

end;

 

end.

 

Автор: Александр (Rouse_) Багель

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить