Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{1.} functionMyExitWindows(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: procedureTForm1.Button1Click(Sender: TObject); begin
MyExitWindows(EWX_POWEROFF or
EWX_FORCE); end
;
// Example to reboot Windows: procedureTForm1.Button1Click(Sender: TObject); begin
MyExitWindows(EWX_REBOOT or
EWX_FORCE); end
;
// Parameters for MyExitWindows() {************************************************************************} {2. Console Shutdown Demo} programShutdown;
{$APPTYPE CONSOLE} usesSysUtils, Windows;
// Shutdown Program // (c) 2000 NeuralAbyss Software // www.neuralabyss.com varlogoff: 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
.