Avatar billede refpsych Nybegynder
13. maj 2002 - 21:03 Der er 5 kommentarer og
1 løsning

Shutdown med winAPI

Hvordan laver jeg et tvunget shutdown af windows med windows API? Source tak...
Avatar billede martinlind Nybegynder
13. maj 2002 - 21:50 #1
unit ShutDownU;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    btnRestart: TButton;
    procedure btnRestartClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{$ifdef Ver90} { Delphi 2.0x }
  {$define Delphi32LessThan3}
{$endif}
{$ifdef Ver93} { C++ Builder 1.0x }
  {$define Delphi32LessThan3}
{$endif}

{$ifdef Delphi32LessThan3}
procedure Win32Check(Value: Boolean);
begin
  if not Value then
    raise Exception.Create(SysErrorMessage(GetLastError))
end;
{$endif}

procedure TForm1.btnRestartClick(Sender: TObject);
var
  HToken: THandle;
  TP, OldTP: TTokenPrivileges;
  ReturnLen: Integer;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    //Get a token for this process
    Win32Check(OpenProcessToken(GetCurrentProcess(),
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
      {$ifdef Delphi32LessThan3}@{$endif}HToken));
    //Get the LUID for the shutdown privilege
    Win32Check(LookupPrivilegeValue(nil,
      'SeShutdownPrivilege', TP.Privileges[0].Luid));
    TP.PrivilegeCount := 1; //One privilege to set
    TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    //Acquire shutdown privilege for this process
    Win32Check(AdjustTokenPrivileges(HToken,
      False, TP, SizeOf(OldTP), OldTP, ReturnLen));
  end;
  //Shut down the system and force all applications to close
  if not ExitWindowsEx(EWX_SHUTDOWN {or EWX_FORCE}, 0) then
    raise Exception.Create('Cannot shut Windows');
  Close;
end;

end.
Avatar billede lanstorp Nybegynder
14. maj 2002 - 22:17 #2
[Error] Shutdown.pas(60): There is no overloaded version of 'AdjustTokenPrivileges' that can be called with these arguments
??? Bruger Delphi 6 Enterprise
Avatar billede martinlind Nybegynder
15. maj 2002 - 10:09 #3
Hmm, det kunne Compilere i D5 ent., men jeg kan se i hjælpen at den forventer PTOKEN_PRIVILEGES, så prøv at lave om til den type

var
  HToken: THandle;
  //TP, OldTP: TTokenPrivileges; <--------------
  TP, OldTP: PTokenPrivileges; <- !!!!!!!!
Avatar billede lanstorp Nybegynder
15. maj 2002 - 10:14 #4
Nope samme fejl, roder lidt videre med det ....
Avatar billede martinlind Nybegynder
15. maj 2002 - 10:22 #5
Jeg kan fortælle at koden er taget fra en DelphiMagazine artikel og jeg har compileret det i D5 til en Console app der virkede.
Avatar billede refpsych Nybegynder
15. maj 2002 - 16:35 #6
Jeg fandt en der virkede i D6 på http://borrisholt.com
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester