Win32Check(ExitWindows(0, 0));
// Zaloguj się jako nowy użytkownik
 
Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
//Uruchom ponownie komputer
 
Win32Check(ExitWindowsEx(EWX_SHUTDOWN, 0));
// Wyłącz komputer

albo (win 2000/xp)
WinExec('shutdown -p -t xx', sw_hide);

gdzie p to parametr, który może wynosić :
-l : wylogowanie
-r : restart
-s : wyłączenie,
zaś xx to liczba sekund po której komputer zostanie wyłączony/zrestartowany.
Można także miedzy parametr a -t dodać -f, przez które windows nie zaczeka na zamknięcie programów

Kategoria: Delphi » FAQ

9 komentarzy

Brak avatara
Napisany 2007-02-12 16:19 przez Lade

tak

Brak avatara
Napisany 2007-02-09 13:15 przez Lade

tak pod kazdym winde z cmd sie odpali

Brak avatara
Napisany 2006-05-02 10:31 przez rusk

Kompilator rzuca mi sie do linijki  LookupPrivilegeValue(nil,SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
Undeclared identifier: 'SE_SHUTDOWN_NAME'
o co chodzi? Trzeba coś dodać może w sekcji uses?

Brak avatara
Napisany 2005-02-26 18:58 przez chryssalid

Oto prawidlowy sposób

//włączenie przywilejów

var hToken: THandle;
    tkp: TTokenPrivileges;
    Dummy: Cardinal;

Dummy:=0;
if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
begin
  LookupPrivilegeValue(nil,SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
  tkp.PrivilegeCount:=1;
  tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken, False,tkp,0,PTokenPrivileges(nil)^,dummy);
  if GetLastError=ERROR_SUCCESS then
  begin
    //od tej chwili działa standardowa funkcja, jak niżej
    ExitWindowsEx(EWX_SHUTDOWN,0);
  end;
end;

Avatar: marok22
Napisany 2004-09-06 13:09 przez marok22

Polecenie zamykania i resetowania pod XP nie dziala - pisze ze nie ma odpowiednich uprawnien chociaz jestem adminem

Brak avatara
Napisany 2004-06-02 15:34 przez wlwojtas

a ja mam pytanie: jak to zrobić w Win2000, wygrzbałem z SDK, że trzeba zrobić
SE_PRIVILIGE_ENABLED dla SE_SHUTDOWN_NAME w AdjustTokenPiviliges ale niebardzo wiem jak zbudować składnię...
+
Win32Check(ExitWindowsEx(EWX_SHUTDOWN, 0));
// w Win2000 powoduje błąd 1314 "klient nie ma wymaganego przywileju" czyli właśnie Shutdown_Name jak sądzę...

jak ktoś wie to proszę o pomoc

Brak avatara
Napisany 2004-04-15 18:56 przez Snowak

u mnie dziala tylko wyloguj

Avatar: Pik
Napisany 2003-06-29 19:45 przez Pik

A jak to zrobić w Windows'ie XP?
Tak:

<b>WinExec('shutdown.exe -s -f -t 0', SW_HIDE); </b>

4programmers.net