Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi shutdown! (https://www.delphipraxis.net/44750-shutdown.html)

BornToBeBreit 24. Apr 2005 07:39


shutdown!
 
Hi @ all

allso, hab jetz schon alles versucht, hab gesucht gesucht gesucht und gesucht und nix gefunden.

Ich hab eigentlich ne ganz einfache frage, wie schaff ich es meinen Pc herunterzu fahren, dazu hab ich schon viel gefunden, aber immer wenn ich den code dann benutze, passirt garnix.

Warum?

Ich raffs net, ach, ich hab windows xp proffesional, aber das müsste doch keinen unterschied machen oder?

[edit=sakura] Sch*** aus dem Titel entfernt. Mfg, sakura[/edit]

alcaeus 24. Apr 2005 07:40

Re: Sch*** shutdown!
 
Moin BornToBeBreit,

nimm mal das Kraftwort aus dem Titel raus.
Weiters waere es ganz interessant zu wissen, welche Codes du verwendest hast.

Greetz
alcaeus

PierreB 24. Apr 2005 07:41

Re: Sch*** shutdown!
 
Welchen Code hast du denn bereits ausprobiert ?

//Verdammt bist du schnell, alci
// War das nicht einfach
Delphi-Quellcode:
Shotdown
?

MathiasSimmack 24. Apr 2005 07:44

Re: Sch*** shutdown!
 
Kann ich euch sagen, Jungs: Vermutlich nur den normalen ExitWindowsEx-Befehl. Der Teil, dass man auf NT-System erst mal ein bestimmtes Privileg holen muss, wird immer gern überlesen. Daher auch:
Zitat:

Zitat von BornToBeBreit
Ich raffs net, ach, ich hab windows xp proffesional, aber das müsste doch keinen unterschied machen oder?

;)

BornToBeBreit 24. Apr 2005 07:48

Re: Sch*** shutdown!
 
Also ich benutze folgenden code


Delphi-Quellcode:
function ExitWin(flag:word): Boolean;
var vi     : TOSVersionInfo;
    hToken : THandle;
    tp     : TTokenPrivileges;
    h      : DWord;

begin
  //result := false;
  vi.dwOSVersionInfoSize:=SizeOf(vi);
  GetVersionEx(vi);
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT
  begin
    // Achtung bei Delphi 2 muß @hToken stehen ... !!!! ?????
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
    LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
    tp.PrivilegeCount := 1;
    tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    h := 0;
    AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h);
    CloseHandle(hToken);
    result := ExitWindowsEx(flag,0);
  end
  else // Windows 95
  begin
    Result := ExitWindowsEx(flag,0);
  end;
end;
[Edit]Doppelten Code entfernt[/EDIT]

[edit=Sharky]Tags korigiert und doppelten Code entfernt. Mfg, Sharky[/edit]

Kidix 24. Apr 2005 08:42

Re: Sch*** shutdown!
 
Was ist denn hiermit?

Delphi-Quellcode:
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;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyExitWindows(EWX_POWEROFF or EWX_FORCE);
end;

Jens Schumann 24. Apr 2005 09:02

Re: Sch*** shutdown!
 
Hallo Kidix,
warum hast Du den Source gepostet? Kannst Du den unterschied zu BornToBeBreit's geposteten Code
erklären?
Außerdem enthält Dein Code einen Fehler. Das Tokenhandle wird nicht mit CloseHandle freigegeben.

Waldteufel 24. Apr 2005 09:15

Re: Sch*** shutdown!
 
Hi.

Es geht auch einfacher. Die nette Firma Microsoft hat nämlich ein Programm geschrieben, dass in ungefähr das macht, was beschrieben wurde... ;-) Bei XP gehts auf jeden fall... Andere Betriebssysteme hab ich nicht zum Testen zur verfügung.

Delphi-Quellcode:
ShellExecute(Handle, PChar('open'), PChar('C:\Windows\System32\shutdown.exe'), PChar('-s'), SW_HIDE);
{ code ungetestet, da delphi gerade in reparatur... }
mfg, Waldteufel

alcaeus 24. Apr 2005 09:16

Re: Sch*** shutdown!
 
Hallo Waldteufel,

das shutdown-Dienstprogramm gibts nur unter XP und 2k (glaub ich jedenfalls), und man braucht Admin-Rechte um es benutzen zu koennen. Ganz so freundlich waren die Jungs von MS doch nicht ;)

Greetz
alcaeus

Waldteufel 24. Apr 2005 09:19

Re: Sch*** shutdown!
 
Hi.

Zitat:

Zitat von alcaeus
das shutdown-Dienstprogramm gibts nur unter XP und 2k (glaub ich jedenfalls)

Mag sein, aber er hat gesagt, dass er das für nen XP-Rechner braucht... ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz