На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Закрытие програм при Logoff/Shutdown , как сделать
      ExpandedWrap disabled
        unit Unit1;
         
        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.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0153 ]   [ 16 queries used ]   [ Generated: 28.04.24, 06:17 GMT ]