 
   Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
 
   Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{1.}
function MyExitWindows(RebootParam: Longword): Boolean; 
var
 
  TTokenHd: THandle; 
  TTokenPvg: TTokenPrivileges; 
  cbtpPrevious: DWORD; 
  rTTokenPvg: TTokenPrivileges; 
  pcbtpPreviousRequired: DWORD; 
  tpResult: Boolean; 
const
 
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; 
begin
 
  if
 Win32Platform = VER_PLATFORM_WIN32_NT then
 
  begin
 
    tpResult := OpenProcessToken(GetCurrentProcess(), 
      TOKEN_ADJUST_PRIVILEGES or
 TOKEN_QUERY, 
      TTokenHd); 
    if
 tpResult then
 
    begin
 
      tpResult := LookupPrivilegeValue(nil
, 
                                       SE_SHUTDOWN_NAME, 
                                       TTokenPvg.Privileges[0].Luid); 
      TTokenPvg.PrivilegeCount := 1; 
      TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; 
      cbtpPrevious := SizeOf(rTTokenPvg); 
      pcbtpPreviousRequired := 0; 
      if
 tpResult then
 
        Windows.AdjustTokenPrivileges(TTokenHd, 
                                      False
, 
                                      TTokenPvg, 
                                      cbtpPrevious,
                                      rTTokenPvg,
                                      pcbtpPreviousRequired);
    end
;
  end
;
  Result := ExitWindowsEx(RebootParam, 0);
end
;
// Example to shutdown Windows:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyExitWindows(EWX_POWEROFF or
 EWX_FORCE);
end
;
// Example to reboot Windows:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyExitWindows(EWX_REBOOT or
 EWX_FORCE);
end
;
// Parameters for MyExitWindows()
{************************************************************************}
{2. Console Shutdown Demo}
program Shutdown;
{$APPTYPE CONSOLE}
uses 
  SysUtils, 
  Windows; 
// Shutdown Program 
// (c) 2000 NeuralAbyss Software 
// www.neuralabyss.com 
var 
  logoff: Boolean = False
; 
  reboot: Boolean = False
; 
  warn: Boolean = False
; 
  downQuick: Boolean = False
; 
  cancelShutdown: Boolean = False
; 
  powerOff: Boolean = False
; 
  timeDelay: Integer = 0; 
function
 HasParam(Opt: Char): Boolean; 
var
 
  x: Integer; 
begin
 
  Result := False
; 
  for
 x := 1 to
 ParamCount do
 
    if
 (ParamStr(x) = '-' + opt) or
 (ParamStr(x) = '/' + opt) then
 Result := True
; 
end
; 
function
 GetErrorstring: string
; 
var
 
  lz: Cardinal; 
  err: array
[0..512] of
 Char; 
begin
 
  lz := GetLastError; 
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil
, lz, 0, @err, 512, nil
); 
  Result := string
(err); 
end
; 
procedure
 DoShutdown; 
var
 
  rl, flgs: Cardinal; 
  hToken: Cardinal; 
  tkp: TOKEN_PRIVILEGES; 
begin
 
  flgs := 0; 
  if
 downQuick then
 flgs := flgs or
 EWX_FORCE; 
  if
 not
 reboot then
 flgs := flgs or
 EWX_SHUTDOWN; 
  if
 reboot then
 flgs := flgs or
 EWX_REBOOT; 
  if
 poweroff and
 (not
 reboot) then
 flgs := flgs or
 EWX_POWEROFF; 
  if
 logoff then
 flgs := (flgs and
 (not
 (EWX_REBOOT or
 EWX_SHUTDOWN or
 EWX_POWEROFF))) or
 
      EWX_LOGOFF; 
  if
 Win32Platform = VER_PLATFORM_WIN32_NT then
 
  begin
 
    if
 not
 OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
 TOKEN_QUERY, 
      hToken) then
 
      Writeln('Cannot open process token. [' + GetErrorstring + ']') 
    else
 
    begin
 
      if
 LookupPrivilegeValue(nil
, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
 
      begin
 
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; 
        tkp.PrivilegeCount           := 1; 
        AdjustTokenPrivileges(hToken, False
, tkp, 0, nil
, rl); 
        if
 GetLastError <> ERROR_SUCCESS then
 
          Writeln('Error adjusting process privileges.'); 
      end
 
      else
 
        Writeln('Cannot find privilege value. [' + GetErrorstring + ']'); 
    end
; 
    
{   if CancelShutdown then 
          if AbortSystemShutdown(nil) = False then 
            Writeln('Cannot abort. [' + GetErrorstring + ']') 
          else 
           Writeln('Cancelled.') 
       else 
       begin 
         if InitiateSystemShutdown(nil, nil, timeDelay, downQuick, Reboot) = False then 
            Writeln('Cannot go down. [' + GetErrorstring + ']') 
         else 
            Writeln('Shutting down!'); 
       end; 
    } 
  end; 
  
//     else begin 
  ExitWindowsEx(flgs, 0); 
  //     end; 
end; 
begin
 
  Writeln('Shutdown v0.3 for Win32 (similar to the Linux version)'); 
  Writeln('(c) 2000 NeuralAbyss Software. All Rights Reserved.'); 
  if
 HasParam('?') or
 (ParamCount = 0) then
 
  begin
 
    Writeln('Usage:    shutdown [-akrhfnc] [-t secs]'); 
    Writeln('                  -k:      don''t really shutdown, only warn.'); 
    Writeln('                  -r:      reboot after shutdown.'); 
    Writeln('                  -h:      halt after shutdown.'); 
    Writeln('                  -p:      power off after shutdown'); 
    Writeln('                  -l:      log off only'); 
    Writeln('                  -n:      kill apps that don''t want to die.'); 
    Writeln('                  -c:      cancel a running shutdown.'); 
  end
 
  else
 
  begin
 
    if
 HasParam('k') then
 warn := True
; 
    if
 HasParam('r') then
 reboot := True
; 
    if
 HasParam('h') and
 reboot then
 
    begin
 
      Writeln('Error: Cannot specify -r and -h parameters together!'); 
      Exit; 
    end
; 
    if
 HasParam('h') then
 reboot := False
; 
    if
 HasParam('n') then
 downQuick := True
; 
    if
 HasParam('c') then
 cancelShutdown := True
; 
    if
 HasParam('p') then
 powerOff := True
; 
    if
 HasParam('l') then
 logoff := True
; 
    DoShutdown; 
  end
; 
end
.