본문 바로가기
Delphi Tip/+Tip

윈도우 종료(재시작) 3가지 방법

by MonoSoft 2022. 4. 5.
728x90
반응형

윈도우 종료(재시작) 3가지 방법

 

Title: Shutdown Computer by 3 Solution

Question: how i can shutdown computer in windows NT family?

 

Answer:

// ALI EBRAHIMI DORCHEH (ebr_ali@yahoo.com)

 

//------------- Solution 1-----------------

procedure TForm1.Button1Click(Sender: TObject);

begin

  ExitWindowsEx(EWX_FORCE and EWX_SHUTDOWN,0);

  //EWX_SHUTDOWN for shutdown

  //EWX_REBOOT for reboot

  //EWX_LOGOFF for logoff

end;

//------------- Solution 2-----------------

run %Windir%\system32\shutdown.exe
Example :


procedure TForm1.Button1Click(Sender: TObject);

begin

  WinExec('shutdown.exe -s -f -t 0' , SW_HIDE);

end;

 

//------------- Solution 3-----------------

unit Unit1;

interface

uses

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

  Dialogs, StdCtrls;

 

type

  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

 

implementation

{$R *.dfm}

function SetPrivilege1 (sPrivilegeName: string; bEnabled: Boolean) : Boolean;

var

  TPPrev,

  TP       : TTokenPrivileges;

  Token    : THandle;

  dwRetLen : DWORD;

begin

  result := False;

  OpenProcessToken (GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);

  TP.PrivilegeCount := 1;

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

  begin

    if bEnabled 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;

  CloseHandle (Token)

end;

 

function WinExit1 (iFlags: integer) : Boolean;

begin

  result := true;

  if SetPrivilege1 ('SeShutdownPrivilege', true) then

  begin

    if (not ExitWindowsEx (iFlags, 0)) then

    begin

      result := False

    end;

    SetPrivilege1 ('SeShutdownPrivilege', False)

  end

  else

  begin

    result := False

  end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin
  // 0= Logoff

  // 1= Shutdown

  WinExit1(1);

end;

end.

 

728x90
반응형

댓글