Закрытие програм при Logoff/Shutdown
Falk0ner, вс, 06/07/2008 - 15:34.
Закрытие програм при Logoff/Shutdown
unit Unit1;
{©Drkb v.3(2007): www.drkb.ru}
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_) Багель
Взято из http://forum.sources.ru
{©Drkb v.3(2007): www.drkb.ru}
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.
Отправить комментарий