![]() |
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] |
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 |
Re: Sch*** shutdown!
Welchen Code hast du denn bereits ausprobiert ?
//Verdammt bist du schnell, alci // War das nicht einfach
Delphi-Quellcode:
?
Shotdown
|
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:
|
Re: Sch*** shutdown!
Also ich benutze folgenden code
Delphi-Quellcode:
[Edit]Doppelten Code entfernt[/EDIT]
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=Sharky]Tags korigiert und doppelten Code entfernt. Mfg, Sharky[/edit] |
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; |
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. |
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:
mfg, Waldteufel
ShellExecute(Handle, PChar('open'), PChar('C:\Windows\System32\shutdown.exe'), PChar('-s'), SW_HIDE);
{ code ungetestet, da delphi gerade in reparatur... } |
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 |
Re: Sch*** shutdown!
Hi.
Zitat:
|
Re: Sch*** shutdown!
Zitat:
|
Re: Sch*** shutdown!
Zitat:
|
Re: Sch*** shutdown!
Ich benutze die Procedure aus der
![]() |
Re: Sch*** shutdown!
Hey Garfield
der code funktionirt perfekt, genau wie ich ihn wollt. danke euch allen. |
Re: Sch*** shutdown!
Zitat:
|
Re: shutdown!
Ja, da hast vieleicht recht aber ich hab halt nonet so viel erfahrung mit delphi.
|
Re: shutdown!
Dann laß dich doch beraten. Es ist nicht schlimm nichts zu wissen, aber sich damit, nichts zu wissen, rauszureden das ist schlimm -> siehe
![]() |
Re: Sch*** shutdown!
Zitat:
|
Re: shutdown!
Hallo Luckie,
wie sieht es aus? Bekommen wie den denkbar besten Code noch zu sehen? :stupid: |
Re: shutdown!
Ich glaube nicht, denn das wäre ja eine subjektive Beitragsbewertung, wg. der Luckie die DP verlassen müsste. :mrgreen:
|
Re: shutdown!
Zitat:
![]() |
Re: shutdown!
Ich habe das schon mitbekommen, Jens. ;) Das war nur ein Insider-Joke aus dem Niveauthread von mir. Aber jetzt höre ich, das wird OT. Außerdem zünden Gags nicht mehr, wenn man sie erklären muss. :lol:
|
Re: shutdown!
Zitat:
Was mich an dem Code von Gardian Knot stört, ist das jegliche Rückgabewerte auf das sträflichste missachtet wurden. Da ist selbst der Code, der auf der ersten Seite gepostet wurde noch besser.
Delphi-Quellcode:
Das ist meine Funktion, um das Privileg zu aktivieren.
function EnablePrivilege(const Privilege: string; fEnable: Boolean; out
PreviousState: Boolean): DWORD; var Token : THandle; NewState : TTokenPrivileges; Luid : TLargeInteger; PrevState : TTokenPrivileges; Return : DWORD; begin PreviousState := True; if (GetVersion() > $80000000) then // Win9x Result := ERROR_SUCCESS else begin // WinNT if not OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, Token) then Result := GetLastError() else try if not LookupPrivilegeValue(nil, PChar(Privilege), Luid) then Result := GetLastError() else begin NewState.PrivilegeCount := 1; NewState.Privileges[0].Luid := Luid; if fEnable then NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else NewState.Privileges[0].Attributes := 0; if not AdjustTokenPrivileges(Token, False, NewState, SizeOf(TTokenPrivileges), PrevState, Return) then Result := GetLastError() else begin Result := ERROR_SUCCESS; PreviousState := (PrevState.Privileges[0].Attributes and SE_PRIVILEGE_ENABLED <> 0); end; end; finally CloseHandle(Token); end; end; end; |
Re: shutdown!
Danke
|
Re: shutdown!
Zitat:
PS: Meine späte Antwort liegt daran, dass ich auf Montage war. |
Re: shutdown!
@Luckie
Kannst du mir die Parameter erklären, die ich übergeben muss, bzw zurück erhalte ? *ganzliebguck* gruss |
Re: shutdown!
Bei mir läuft Kidix's Code aber :gruebel: . Ich hab xp_prof und verwende ihn selbst immer... .
|
Re: shutdown!
Der erste Paramter gibt das Privilieg an, um welches es geht, der zweite ob es aktiviert oder deaktiviert werden soll und der dritte gibt zurück, ob das Privileg vorher aktiviert oder deaktiviert war.
|
Re: shutdown!
und result gibt zurück ob Fhler aufgetreten sind, richtig ?
gruss |
Re: shutdown!
Richtig. Den kannst du mit GetLastError auswerten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz