Programowanie w języku Delphi » FAQ

Jak zamknąć, zresetować, wylogować się z systemu

  • 2008-03-02 16:43
  • 9 komentarzy
  • 1039 odsłon
  • Oceń ten tekst jako pierwszy
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

9 komentarzy

Lade 2007-02-09 13:15

tak pod kazdym winde z cmd sie odpali

rusk 2006-05-02 10:31

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?

chryssalid 2005-02-26 18:58

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;

marok22 2004-09-06 13:09

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

wlwojtas 2004-06-02 15:34

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

Snowak 2004-04-15 18:56

u mnie dziala tylko wyloguj

Pik 2003-06-29 19:45

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

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